Problem: 92. 反转链表 II
文章目录
- 思路
- 复杂度
- Code
思路
遍历到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 = Nonecur = p0.next # leftfor _ in range(right - left + 1):nxt = cur.nextcur.next = prepre = curcur = nxtp0.next.next = curp0.next = prereturn dummy.next