Problem: 92. 反转链表 II
思路
遍历到left前一个结点,反转[left, right]这一段区间
当区间反转完毕后,p0(反转区间left的前一个结点,因为当left是head结点的时候,并无前一个结点,避免这种情况需要加一个虚结点)需要做相应的处理

上图用于解释
p0.next.next = cur
p0.next = pre
复杂度
时间复杂度: O ( n ) O(n) O(n) 区间长度
空间复杂度: O ( 1 ) O(1) O(1) 若干中间变量
Code
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseBetween(self, head: Optional[ListNode], left: int, right: int) -> Optional[ListNode]:
'''
思路:遍历到left前一个结点,反转[left, right]这一段区间
'''
p0 = dummy = ListNode(next=head)
for _ in range(left-1):
p0 = p0.next
# 同反转链表
pre = None
cur = p0.next # left
for _ in range(right - left + 1):
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
p0.next.next = cur
p0.next = pre
return dummy.next
388

被折叠的 条评论
为什么被折叠?



