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)
temp = current→ temp和current都指向节点1current.next = prev→ 节点1的next变为None(不再指向节点2)prev = temp→ prev指向节点1,此时节点1的next是Nonecurrent = 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
temp = current.next→ temp保存节点2的引用current.next = prev→ 节点1的next改为Noneprev = current→ prev移动到节点1current = temp→ current移动到节点2
- 第二次循环:
temp = current.next→ temp保存节点3current.next = prev→ 节点2的next改为节点1prev = current→ prev移动到节点2current = temp→ current移动到节点3
- 第三次循环:
temp = current.next→ temp保存Nonecurrent.next = prev→ 节点3的next改为节点2prev = current→ prev移动到节点3current = temp→ current变为None,循环结束
最终prev指向节点3,链表变成3->2->1->None,完全符合反转要求。
内容的提问来源于stack exchange,提问作者Jessica
相关产品推荐
相关产品推荐

