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

Python反转链表代码错误分析:为何我的实现无法正常运行?

反转链表实现错误分析

你的代码问题出在对链表节点引用的理解偏差,先看你的实现代码:

def reverse(self, head):
    if head is None or head.next is None:
        return head

    prev = None
    current = head

    while current is not None:
        temp = current
        current.next = prev
        prev = temp
        current = prev.next

    return prev

你的思考过程错误点

你的思考第3步完全错误:Python里对象赋值是引用传递,temp = current后,temp和current指向的是同一个节点。当你执行current.next = prev时,节点1的next已经被改成None了,此时prev = temp后,prev.next也是None,根本不存在prev.next.val = 2的情况。

用链表1->2->3->None的例子,完整走一遍你的代码执行流程:

  • 初始状态:prev = None,current = 节点1(next=节点2)
  1. temp = current → temp和current都指向节点1
  2. current.next = prev → 节点1的next变为None(不再指向节点2)
  3. prev = temp → prev指向节点1,此时节点1的next是None
  4. current = prev.next → current变为None,循环直接结束

最后返回的prev是节点1,链表只剩1->None,节点2、3完全丢失,这就是代码失效的核心原因。

正确实现的逻辑

正确代码先保存当前节点的下一个节点,避免修改current.next后丢失后续链表的引用:

while current is not None:
    temp = current.next
    current.next = prev
    prev = current
    current = temp

同样用1->2->3->None模拟执行:

  • 初始状态:prev = None,current = 节点1
  1. temp = current.next → temp保存节点2的引用
  2. current.next = prev → 节点1的next改为None
  3. prev = current → prev移动到节点1
  4. current = temp → current移动到节点2
  • 第二次循环:
  1. temp = current.next → temp保存节点3
  2. current.next = prev → 节点2的next改为节点1
  3. prev = current → prev移动到节点2
  4. current = temp → current移动到节点3
  • 第三次循环:
  1. temp = current.next → temp保存None
  2. current.next = prev → 节点3的next改为节点2
  3. prev = current → prev移动到节点3
  4. current = temp → current变为None,循环结束

最终prev指向节点3,链表变成3->2->1->None,完全符合反转要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 01:40:27