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

为何添加到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:22:48