You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode #206反转链表:为何返回prev变量作为解决方案?

为什么反转链表的解法中返回prev就是完整的反转链表?

先看原题的代码实现:

class Solution:
    def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        # setting pointers
        prev, curr = None, head

        while curr is not None:
            nxt = curr.next
            curr.next = prev
            prev = curr
            curr = nxt
        return prev

我们用链表[1,2,3,4,5]一步步拆解循环过程,就能明白为什么最后返回prev是完整的反转链表:

初始状态

  • prev = None(用来记录当前节点的前一个节点)
  • curr = 1(指向原链表的头节点)

第1轮循环

  1. nxt = curr.next → 保存当前节点的下一个节点,也就是2
  2. curr.next = prev → 把当前节点1的指针反转,指向prev(也就是None),现在1变成了反转链表的尾节点
  3. prev = curr → prev移动到当前节点1,现在它记录的是反转链表的最后一个有效节点
  4. curr = nxt → curr移动到下一个节点2,继续处理原链表的剩余部分

此时链表状态:1 → None,2 → 3 → 4 → 5


第2轮循环

  1. nxt = 3 → 保存2的下一个节点
  2. curr.next = prev → 2的指针反转指向1,现在反转链表变成2 → 1 → None
  3. prev = 2 → prev更新为2,成为反转链表的新头部
  4. curr = 3 → 移动到原链表的下一个节点

此时链表状态:2 → 1 → None,3 → 4 → 5


第3轮循环

  1. nxt = 4
  2. 3的指针反转指向2,反转链表变为3 → 2 → 1 → None
  3. prev = 3,curr = 4

此时链表状态:3 → 2 → 1 → None,4 → 5


第4轮循环

  1. nxt = 5
  2. 4的指针反转指向3,反转链表变为4 → 3 → 2 → 1 → None
  3. prev = 4,curr = 5

此时链表状态:4 → 3 → 2 → 1 → None,5 → None


第5轮循环

  1. nxt = 5.next → 也就是None
  2. 5的指针反转指向4,现在完整的反转链表是5 → 4 → 3 → 2 → 1 → None
  3. prev = 5 → prev移动到5,成为反转链表的头部
  4. curr = nxt → curr变成None,循环结束

循环结束时,curr已经走到原链表的末尾(None),而prev刚好停在反转后的链表的头节点5上。因为每一轮循环都把当前节点的指针反转指向了前一个节点,所以从5开始顺着next指针走,就能遍历完整的反转链表,返回prev自然就是最终的解。

内容的提问来源于stack exchange,提问作者Erick Pruneda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 20:42:09