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

Python链表添加新头节点出错,求代码问题排查及实现方法

链表添加节点的问题分析与修正

你的代码存在的问题:

  • 初始化逻辑错误:LinkedList的__init__方法中,无论传入的head_node是否为None,都会创建一个Node实例。如果传入None,会得到一个value为None的节点,不符合空链表的定义。
  • 头节点添加逻辑完全错误:add_new_head方法里,先把self.head_node赋值为新节点,再让新节点的next_node指向self.head_node(也就是它自己),这会导致链表变成一个自循环的单个节点,完全丢失原来的链表数据。
  • 参数类型不匹配:调用add_new_head时传入的是数值(5、6),但方法里把它当作Node实例来操作,会导致后续访问new_head_node.next_node时出错(因为整数没有next_node属性)。
  • 缺少链表打印方法:直接print(li)只会输出对象的内存地址,无法看到链表的实际内容。

正确的实现方式:

下面是修正后的代码,同时添加了打印链表的方法:

class Node:
    def __init__(self, value, next_node=None):
        self.value = value
        self.next_node = next_node


class LinkedList:
    def __init__(self, head_value=None):
        # 初始化空链表或带初始节点的链表
        self.head_node = Node(head_value) if head_value is not None else None

    def add_new_head(self, new_value):
        # 创建新节点,将新节点的next指向原头节点
        new_node = Node(new_value)
        new_node.next_node = self.head_node
        # 更新链表头为新节点
        self.head_node = new_node

    def __str__(self):
        # 遍历链表,生成可读的字符串
        current = self.head_node
        result = []
        while current:
            result.append(str(current.value))
            current = current.next_node
        return " -> ".join(result)


# 测试代码
li = LinkedList(4)
li.add_new_head(5)
li.add_new_head(6)
print(li)  # 输出: 6 -> 5 -> 4

关键说明:

  • 初始化修正:判断初始值是否存在,不存在则链表头设为None,代表空链表。
  • 头插法逻辑:先让新节点指向原头节点,再更新链表头,这样不会丢失原有链表的引用。
  • 参数处理:add_new_head接收数值,内部创建Node实例,符合调用时的传参习惯。
  • 打印方法:通过__str__方法遍历链表,将节点值拼接成可读的字符串,方便查看链表内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 17:52:39