一、链表反转进阶
1.1 基础反转 (LeetCode 206)
反转链表是链表操作中最基础的题型。核心在于维护三个指针:前驱 pre、当前 cur 和后继 nxt。每次迭代将当前节点的 next 指向前驱,然后整体后移。
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def reverseList(self, head):
pre = None
cur = head
while cur:
nxt = cur.next
cur.next = pre
pre = cur
cur = nxt
return pre
1.2 部分反转 (LeetCode 92)
当需要反转指定区间 [left, right] 时,关键在于找到反转区间的'前一个节点'和'后一个节点'。使用哑节点(dummy node)可以方便地处理头节点变化的情况。
具体步骤如下:
- 遍历到
left - 1位置,记录为p0。 - 从
p0.next开始执行标准的反转逻辑,循环次数为right - left + 1。 - 注意连接断点,确保
p0.next指向新的头,原头节点的next指向剩余部分。
class Solution:
def reverseBetween(self, head, left, right):
p0 = dummy = ListNode(next=head)
# 移动到 left 的前一个位置
for _ in range(left - ):
p0 = p0.
pre =
cur = p0.
_ (right - left + ):
nxt = cur.
cur. = pre
pre = cur
cur = nxt
p0.. = cur
p0. = pre
dummy.


