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

Python LinkedList的append_multiple方法为何重复首个元素?

链表首个元素重复的原因及修复方案

问题根源

问题出在append_last方法的逻辑漏洞上:当链表为空(self.head is None)时,你创建了头节点但没有终止方法执行,导致后续代码又重复添加了一次相同的元素。

执行流程拆解

调用append_multiple(["a", "b", "c"])时:

  1. 先执行self.head = None清空链表
  2. 第一次循环处理data="a":
    • 进入append_last,发现self.head为空,创建Node("a", None)并赋值给self.head
    • 没有终止方法,继续执行后续代码:itr = self.head(此时itr指向刚创建的a节点)
    • 循环while itr.next:因为itr.next是None,循环直接跳过
    • 执行itr.next = Node("a", None),给a节点额外添加了一个相同的a节点作为后继
  3. 处理b、c时,链表头部已存在,后续代码正常执行,只会添加一次元素,最终就出现了首个元素重复的结果。

修复方案

只需在append_last的空链表判断分支里添加return,或者用else包裹后续逻辑即可:

方案1:添加return终止方法

def append_last(self, data):
    if self.head is None:
        self.head = Node(data, None)
        return  # 添加return,避免后续代码重复执行
    itr = self.head
    while itr.next:
        itr = itr.next
    itr.next = Node(data, None)

方案2:用else包裹后续逻辑

def append_last(self, data):
    if self.head is None:
        self.head = Node(data, None)
    else:
        itr = self.head
        while itr.next:
            itr = itr.next
        itr.next = Node(data, None)

修复后再次运行代码,输出就会变成正常的a--->b--->c--->。

内容的提问来源于stack exchange,提问作者A Ki Nir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 07:37:37