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
相关产品推荐
相关产品推荐

