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

Python链表元素删除函数运行触发AttributeError问题排查

链表remove函数AttributeError报错解决方案

报错原因

该报错本质是代码访问了对象不存在的属性,结合这段remove函数的逻辑,常见触发原因有两类:

  • 链表节点类定义不匹配:你自定义的链表节点类没有名为val或者next的属性,比如属性名被定义为value、next_node等其他名称,访问curr.val、prev.next时就会触发属性不存在的报错。
  • 入参或链表结构非法:传入的head不是合法的链表节点实例(比如传了整数、字符串等其他类型的对象),或者链表中某个节点的next属性指向了非节点、非空的其他类型对象,循环中访问curr.val时就会触发报错。

注:你提供的remove函数本身逻辑是正确的,不存在空指针访问属性的问题:代码中仅在prev不为空的前提下才会访问prev.next,不会出现空对象调用属性的情况。

修复方案

  1. 对齐链表节点属性名
    首先确认你的链表节点类定义和函数中访问的属性名一致,标准的链表节点定义参考如下:
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

如果你的节点属性名自定义为其他值,对应修改remove函数中的属性访问语句即可,比如属性名为value就把所有curr.val改为curr.value。

  1. 增加入参校验(可选)
    可以在函数开头增加简单的合法性校验,提前抛出明确的错误提示,方便定位问题:
def remove (head,val):
    # 新增入参校验逻辑
    if head is not None:
        if not hasattr(head, 'val') or not hasattr(head, 'next'):
            raise TypeError("入参head不是合法的链表节点对象")
    prev,curr=None,head
    while curr:
        if curr.val==val:
             if prev:
                 prev.next=curr.next
             else:
                  head=curr.next
             curr=curr.next
        else:
           prev,curr=curr,curr.next
    return head
  1. 校验链表结构
    检查你构建的链表,确保每个节点的next属性仅赋值为None或者另一个合法的链表节点实例,不要赋值其他类型的对象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:03