92. Reverse Linked List II
要reverse指定位置间的node
,但链表自身没有index
,只能自己来记录index
了。
简单的思路是先把当前指针移动m次,到达要reverse的第一个node,然后用 Q206 的方法 reverse 接下来的 m-n 个node,最后再把两头接上。为了应对m=1
的情况,最左端需要多连一个node
来保证left
指针位置有效。
或者,用另一种思路去reverse,即遇到第m个node
后,记录当前prev[m]
,然后不停地把它后面一个元素放到prev[m]
的next
位置,移动n-m
次,也一样实现 reverse 这一段的效果,且简洁许多,不需要考虑 m, n 取值的 edge case.
class Solution:
def reverseBetween(self, head: ListNode, m: int, n: int) -> ListNode:
if m == n: return head
dummy = ListNode(0)
dummy.next = head
left = dummy
for _ in range(m-1):
left = left.next
cur = left.next
right = cur
for _ in range(n-m+1):
right = right.next if right.next else None
prev = right
for _ in range(n-m):
follow = cur.next
cur.next = prev
prev = cur
cur = follow
if left: left.next = cur
cur.next = prev
return dummy.next
Last updated
Was this helpful?