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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:42:35