You need to enable JavaScript to run this app. Python实现无空头结点链表:解决输出冗余None及next引用维护问题
优惠活动
大模型
产品
解决方案
定价
更多

Python实现无空头结点链表:解决输出冗余None及next引用维护问题

无空头结点链表实现方案

你当前的输出异常完全来自于初始化时创建的无意义哨兵空节点,要实现无空头结点的链表,核心是把LinkedList的头指针直接指向第一个有效节点,初始空链表时头指针为None,不需要额外创建空Node。

核心逻辑调整点

  • 初始化方法:删除空Node实例,直接将self.head设为None,代表初始状态下链表没有任何节点
  • 追加节点(append)方法:分两种场景处理:
    • 若链表为空(self.head is None):新创建的节点直接作为头结点
    • 若链表非空:从头结点开始遍历,直到找到next为None的尾节点,将新节点挂到尾节点的next上
  • 遍历打印(showElements)方法:直接从存储有效节点的头指针开始遍历,去掉对初始空哨兵节点的遍历逻辑

修正后完整代码

class Node:
    def __init__(self, item=None):
        self.item = item
        self.next = None

class LinkedList:
    def __init__(self):
        # 无空头结点:初始头指针为None,代表空链表
        self.head = None

    def showElements(self):
        curr = self.head
        while curr is not None:
            print(curr.item)
            curr = curr.next

    def append(self, item):
        new_node = Node(item)
        # 场景1:链表为空,新节点直接作为头结点
        if self.head is None:
            self.head = new_node
            return
        # 场景2:链表非空,遍历寻找尾节点
        curr = self.head
        while curr.next is not None:
            curr = curr.next
        curr.next = new_node


# 验证测试用例
llist = LinkedList()
llist.append(1)
print(llist.head.item) # 输出 1,符合预期

llist.append(2) 
print(llist.head.next.item) # 输出 2,符合预期

llist.showElements() # 依次输出 1、2,无多余空值

运行逻辑说明

  • 首次调用append(1)时,链表为空,头指针直接指向存储值1的Node,因此llist.head.item取值为1
  • 第二次调用append(2)时,从存储1的头结点开始遍历,找到尾节点(即存储1的节点本身,它的next为None),将存储2的节点挂到它的next上,因此llist.head.next.item取值为2
  • 遍历打印时从头结点开始,依次遍历两个有效节点,不会输出初始状态的空值

内容的提问来源于stack exchange,提问作者falamiw

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 17:45:03