链表问题
反转链表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