为何添加到LinkedList末尾的节点无法打印?Python新手求助
链表打印问题排查
你向LinkedList末尾追加了数据为8的节点,虽然节点已成功添加,但print_list方法只输出1,2,3,问题出在两个关键地方:
1. 打印方法的循环逻辑缺陷
你的print_list方法里循环条件是while dummy.next != None,这会直接跳过最后一个节点的打印:
- 当遍历到data=3的节点时,
dummy.next指向data=8的节点,满足条件,打印3后dummy移动到data=8的节点 - 此时
dummy.next为None,循环直接终止,永远不会打印8的数值
2. 方法内错误引用全局变量
print_list和append方法里都直接用了list.head,这是硬编码引用全局的list实例,属于不良编程习惯——如果后续创建多个链表实例,会出现逻辑混乱。正确的做法是用self.head访问当前链表实例的头节点。
修改后的完整代码
# creation of nodes and list class Node: def __init__(self, data=None): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None # looping through list def print_list(self): dummy = self.head while dummy is not None: print(dummy.data) dummy = dummy.next def append(self, data): newnode = Node(data) # 处理空链表的边界情况 if self.head is None: self.head = newnode return dummy = self.head while dummy.next is not None: dummy = dummy.next dummy.next = newnode node1 = Node(1) node2 = Node(2) node3 = Node(3) node1.next = node2 node2.next = node3 linked_list = LinkedList() linked_list.head = node1 linked_list.append(8) linked_list.print_list()
修改说明
- 将
print_list的循环条件改为while dummy is not None,确保每个节点的data都会被遍历打印 - 把方法内的
list.head替换为self.head,遵循面向对象的封装原则 - 给
append方法增加空链表判断,避免空链表时出现报错
内容的提问来源于stack exchange,提问作者Dulce Trevino
相关产品推荐
相关产品推荐

