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

空循环链表插入新节点后无法显示数据,addEmpty函数异常求助

问题分析与解决方案

你的代码存在几个关键错误,导致插入的节点无法正常显示:

1. Node类属性定义错误

Node类里把指向下一个节点的属性写成了self.start,逻辑完全错误,应该改成self.nxt,否则所有节点的指针无法正确关联。

2. 循环链表初始化逻辑混乱

原cLL的__init__方法创建了两个空Node并互相指向,这会让链表的空状态判断变得复杂,后续插入节点后,初始的空节点还会干扰遍历。正确的空循环链表应该让start和last都设为None。

3. addEmpty函数的判断条件错误

原代码用self.start.data == None判断空链表,初始化修改后,空链表的start本身就是None,所以应该判断self.start is None才能正确识别空状态。

4. display函数遍历逻辑错误

原循环条件tmp.nxt != self.last.nxt完全错误——循环链表中last.nxt就是start,这个条件会跳过第一个节点,还无法正确终止循环。正确的遍历应该从start开始,直到回到start节点为止,同时要处理空链表的情况。

5. addEnd函数的边界处理缺失

当链表为空时调用addEnd,原代码只打印提示不执行插入,应该直接调用addEmpty处理这种情况。


修正后的完整代码

class Node:
    def __init__(self, data):
        self.data = data
        # 修正:将start改为nxt,作为指向下一个节点的指针
        self.nxt = None

class cLL:
    def __init__(self):
        # 修正:空链表时start和last都设为None
        self.start = None
        self.last = None

    def addEmpty(self, val):
        nu = Node(val)
        # 修正:判断链表是否为空的正确方式
        if self.start is None:
            self.start = nu
            self.last = nu
            nu.nxt = self.start
        return nu

    def addEnd(self, val):
        # 修正:如果链表为空,直接调用addEmpty
        if self.start is None:
            self.addEmpty(val)
        else:
            nu = Node(val)
            self.last.nxt = nu
            self.last = nu
            nu.nxt = self.start

    def display(self):
        # 处理空链表情况
        if self.start is None:
            print("链表为空")
            return
        tmp = self.start
        # 修正:遍历直到回到start节点
        while True:
            print(tmp.data)
            tmp = tmp.nxt
            if tmp == self.start:
                break

rew = cLL()
rew.addEmpty(23)
rew.addEnd(30)
rew.addEnd(90)
rew.addEnd(900)
rew.display()

运行后会正确输出:

23
30
90
900

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:10:11