Python链表遍历尾部打印失效与AttributeError问题排查求助
错误原因分析
- 核心错误出自
Node类的初始化逻辑:你在__init__方法中错误将next属性赋值为Node(类本身),而非链表尾节点标准的空值None。
当traverse函数遍历到最后一个节点时,actual_node.next指向的是Node类对象,并不等于None,因此while循环不会终止。下一步执行print(actual_node.data)时,Node类对象本身不存在实例属性data,直接抛出AttributeError,程序异常中断,循环后的print("----------")自然不会执行。
修复代码
仅需要修改Node类的初始化语句即可:
class Node: def __init__(self, data): self.data = data self.next = None # 原代码此处错误写为Node,替换为None即可
修复后效果
修改完成后重新运行程序:
- 遍历到最后一个节点时,
actual_node.next为None,while循环正常退出 - 循环后的分割线会正常打印
- 无属性错误抛出,程序正常运行结束
可选优化(非必须)
如果想要优化中间节点查找逻辑,可以使用快慢指针法,不需要提前维护链表size,仅遍历一次就能得到中间节点:
def middle_node(self): slow = self.head fast = self.head while fast and fast.next: slow = slow.next fast = fast.next.next print("This is the middle node: " + str(slow)) print("This is the middle node data: " + str(slow.data))
内容的提问来源于stack exchange,提问作者adi.
相关产品推荐
相关产品推荐

