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

单链表head与指针疑问:反转后head为何仅含最后一个元素?

单链表反转后原head变化的原因解析

核心本质:对象引用与可变对象的特性

这不是LeetCode的特殊实现,而是Python(以及大多数面向对象语言)中对象引用和可变对象的固有特性:

  • 单链表的每个节点是一个可变对象(比如包含val和next属性的实例)
  • head、curr这类变量存储的是指向节点对象的引用,而非对象本身
  • 当你通过引用修改对象的内部属性(比如curr.next = prev)时,修改的是对象本身,所有指向该对象的引用(包括原head)都会看到这个变化

结合代码的分步拆解

假设原链表是 1 -> 2 -> 3 -> None,head 指向节点1。

执行反转函数时:

  1. 初始状态:prev = None,curr = head(指向节点1)
  2. 第一次循环:
    • nxt = curr.next → 指向节点2
    • curr.next = prev → 节点1的next被修改为None(这一步直接改变了原head指向的节点的属性)
    • prev = curr → prev指向节点1
    • curr = nxt → curr指向节点2
  3. 后续循环会依次修改节点2、3的next属性,最终让整个链表反转
  4. 循环结束后,prev指向节点3(反转后的新头),而原head依然指向节点1,但节点1的next已经是None——所以原head看起来就像“仅包含最后一个元素”

关于“head自动更新”的误解

原head并没有被“自动更新”:

  • head变量本身的指向从未改变,它始终指向最初的节点1
  • 变化的是节点1的内部属性(next),导致从head出发只能遍历到它自己,因为它的next已经是None了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:05:47