Python LinkedList的append_multiple方法为何重复首个元素?
链表首个元素重复的原因及修复方案
问题根源
问题出在append_last方法的逻辑漏洞上:当链表为空(self.head is None)时,你创建了头节点但没有终止方法执行,导致后续代码又重复添加了一次相同的元素。
执行流程拆解
调用append_multiple(["a", "b", "c"])时:
- 先执行
self.head = None清空链表 - 第一次循环处理
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节点作为后继
- 进入
- 处理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
相关产品推荐
相关产品推荐

