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

Python链表removeFirst方法失效原因咨询:两段代码为何结果不同?

为什么两段removeFirst代码效果不同?

这是个非常典型的Python变量引用问题,我来给你拆解清楚:

先看无法正常工作的代码:

def removeFirst(self):
    head = self.head
    head = head.next

这里的head是一个局部变量——它一开始只是复制了self.head的引用,指向链表的头节点。但当你执行head = head.next时,你只是把这个局部变量的指向改成了下一个节点,完全没有修改self对象的head属性本身。原来的链表头节点依然存在于self.head中,所以链表根本没有任何变化。

再看能正常工作的代码:

def removeFirst(self):
    self.head = self.head.next

这里直接操作的是self对象的head属性——你把它从原来的头节点,直接重新指向了头节点的下一个节点。这样一来,链表的头指针被真正更新,原来的第一个节点因为不再被引用,后续会被Python的垃圾回收机制处理,也就实现了“移除第一个节点”的效果。

通俗类比一下:

想象self是一个抽屉,self.head是抽屉里的一张纸条,上面写着“指向A节点”。

  • 第一种写法:你把纸条内容抄到一张新纸上(head = self.head),然后把新纸上的内容改成“指向B节点”,但抽屉里的原纸条还是写着“指向A”,抽屉的内容根本没变。
  • 第二种写法:你直接拿起抽屉里的原纸条,把内容改成“指向B节点”,这样抽屉的内容就真的更新了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:26:30