Python链表两段相似代码执行输出差异的原因咨询
两段链表代码输出差异的原因
核心差异在于是否修改了链表的头节点指针self.head:
第一段代码分析
else: n = self.head while n.ref is not None: n = n.ref n.ref = new_node
这段代码用临时变量n遍历链表:
- 先让
n指向链表头节点self.head,后续遍历仅修改n的指向,self.head全程保持指向原链表的第一个节点。 - 遍历到链表尾部后,将新节点挂到尾部节点的
ref上,整个链表结构完整保留,头节点未丢失,因此输出时能遍历全部节点,结果正确。
第二段代码分析
else: while self.head.ref is not None: self.head = self.head.ref self.head.ref = new_node
这段代码直接操作self.head遍历:
- 循环中不断将
self.head向后移动,直到它指向原链表的最后一个节点(此时self.head.ref为None)。 - 虽然成功将新节点挂到尾部,但**
self.head已不再指向原链表的第一个节点,而是变成了原链表的最后一个节点**。 - 后续输出链表时,从当前的
self.head开始遍历,自然会跳过原链表中第一个节点到倒数第二个节点的部分,因此输出仅保留原尾部和新节点的值。
内容的提问来源于stack exchange,提问作者user14829429
相关产品推荐
相关产品推荐

