反转链表II
题目描述:给你单链表的头指针head和两个整数left和right,其中left<=right。请你反转从位置left到位置right的链表节点,返回反转后的链表。
示例:
输入:head = [1,2,3,4,5],left = 2,right = 4
输出:result [1,4,3,2,5]
采用一趟扫描的解决思路
(1)分析:首先链表是单向链表,由于是单项链表我们就必须记录当前操作节点前一个节点,由于要进行一趟扫描,而且要进行反转,我们还要设一个变量记录当前操作节点的后一个节点。
(2)实现步骤:
第一步:首先找到操作节点,根据left值,设置一个while循环进行查找第一个要操作的节点。
第二步:根据找到的节点进行反转需要反转的链表。
第三步:连接剩下的节点。
(3)步骤演示图:
(3)代码实现
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:
head1 = ListNode()
head1.next = head
head2 = head1
l = 1
temp = head
while l < left:
head2 = temp
temp = temp.next
l += 1
head2.next = None
'''
此时的head2指向前一个点
temp 指向当前反转的第一个点
'''
# head3 = ListNode()
head3 = temp
temp1 = None
temp2 = temp.next
# head3.next = None
while l <= right:
temp2 = temp.next
temp.next = temp1
temp1 = temp
temp = temp2
if not temp2:
temp2 = None
else:
temp2 = temp2.next
temp2 = temp2.next
l += 1
head3.next = temp
head2.next = temp1
return head1.next

京公网安备 11010502036488号