Python实现LinkedList时print方法输出内存地址而非链表内容如何解决
链表代码问题修复
你的代码存在4处可直接复现你描述问题的错误,修正方案如下:
错误详情
- 传参错误:调用
append方法时传入了Node对象,而append方法内部会自动将传入的值封装为Node节点,导致最终存储的data属性是Node实例,打印时就会输出内存地址。 append逻辑错误:遍历到尾节点后,没有给尾节点的next属性赋值新节点,反而错误将遍历指针itr重新赋值为新节点,还额外创建了多余的节点,完全没有修改原有链表的结构。print方法逻辑错误:在循环体内部直接写了return,第一次打印第一个节点后就直接终止方法,不会遍历后续节点,且return位置错误导致链表为空时的逻辑也无法正常触发。- 语法缩进错误:
print方法的def定义行缩进不匹配,不属于LinkedList类的成员方法,运行时会直接报语法错误。
修正后完整代码
class Node: def __init__(self,data,next=None): self.data = data self.next = next class LinkedList: def __init__(self,head=None): self.head = head def append(self,data): if self.head is None: self.head = Node(data) return itr = self.head while itr.next: itr = itr.next # 直接给尾节点的next赋值新节点 itr.next = Node(data) def print(self): itr = self.head if itr is None: print("None") return while itr: print(itr.data," --> ",end="") itr = itr.next # 循环结束后打印末尾的None print("None") def reverse(self): pass linked = LinkedList() linked.print() # 直接传值,不要封装Node linked.append(3) linked.print() linked.append(7) linked.print() linked.append(10) linked.print()
运行结果
None 3 --> None 3 --> 7 --> None 3 --> 7 --> 10 --> None
内容的提问来源于stack exchange,提问作者Zakaria Ayadi
相关产品推荐
相关产品推荐

