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

Python循环单链表调用delete_entire方法报NoneType无value属性错误

问题原因及解决方案

错误原因

  • __iter__方法未处理空链表场景:删除整个链表后self.head被赋值为None,迭代器没有做空判断,直接将None作为节点返回,列表推导式访问node.value时触发属性错误。
  • delete_entire方法执行顺序存在隐患:原代码先将self.head置为None再修改self.tail.next,如果调用该方法时链表本身为空,self.tail本身就是None,访问self.tail.next会直接触发报错。
  • 额外笔误:代码中打印语句的迭代对象写为call,和实际定义的链表变量名cll不符,会触发名称错误。

修复方案

1. 修正__iter__方法

添加空链表判断,空链表直接终止迭代,不会返回任何节点:

def __iter__(self):
    if self.head is None:
        return
    node = self.head
    while True:
        yield node
        if node.next is self.head:
            break
        node = node.next

2. 修正delete_entire方法

调整执行顺序,先清除循环引用再置空头尾指针,兼容空链表调用场景:

def delete_entire(self):
    if self.tail is not None:
        self.tail.next = None
    self.head = None
    self.tail = None

3. 修正变量名拼写

将打印语句中的call改为cll。

修改后调用删除方法再打印,会直接返回预期的空列表[]。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:00:05