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

链表转换代码修改后触发AttributeError的原因及相关疑问

链表代码修改后报错的原因解析

正确的列表转链表实现

class ListNode:
      def __init__(self, val=0, next=None) -> None:
        self.val = val
        self.next = next

def list_link(nums):
    dummy = ListNode()  

    curr = dummy

    for i in nums:
        curr.next = ListNode(i) #line6
        curr = curr.next

修改后触发错误的代码

class ListNode:
      def __init__(self, val=0, next=None) -> None:
        self.val = val
        self.next = next

def list_link(nums):
    dummy = ListNode() 

    curr = dummy

    for i in nums:
        curr.next = i  #line6
        curr = curr.next

运行修改后的代码会触发错误:AttributeError: 'int' object has no attribute 'next'


问题解析

1. 报错的核心原因

链表的本质是由**ListNode类的实例**串联而成的,每个节点实例都自带val(存储数据)和next(指向下一个节点)两个属性。

在正确代码里,curr.next = ListNode(i)是创建了一个新的ListNode实例:把数值i存在这个实例的val字段里,同时这个实例自带next属性,能继续串联后续节点。

但修改成curr.next = i后,你是直接把整数i赋值给了curr.next——整数是Python的基础数据类型,根本没有next属性。当执行下一行curr = curr.next时,curr就变成了这个整数,下一次循环再尝试访问curr.next时,自然会触发“整数没有next属性”的错误。

2. 关于curr的属性疑问

最初的curr是dummy(ListNode()创建的实例),所以确实具备val和next属性。但在修改后的代码中,第一次循环执行curr = curr.next后,curr就变成了整数i,此时它不再是链表节点,也就失去了val和next属性,这才导致后续循环报错。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 22:40:06