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

Python实现两链表相加报AttributeError: 'int'无val属性求助

错误原因分析

直接触发原因

你在代码中多次将链表节点的next属性赋值为整数0:

my_list.next = 0

链表的next属性设计用途是指向另一个ListNode节点或者空值None,绝对不能赋值为整数等其他类型。第一次执行my_list = my_list.next语句后,my_list变量就从ListNode实例变成了整数0,下一轮循环访问my_list.val时就会抛出AttributeError: 'int' object has no attribute 'val'异常。

其他逻辑问题

  • 进位操作逻辑错误:代码中直接写my_list.next.val = 1,如果my_list.next没有提前初始化为ListNode实例,这行代码也会抛出属性不存在的异常
  • 长链表剩余节点判断错误:你使用if i > num2判断短链表是否遍历完成,实际索引从0开始计数,i == num2时短链表就已经遍历结束了
修复后的代码
from typing import Optional
# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next
class Solution: 
    def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
        # 虚拟头节点,避免处理头节点单独赋值的逻辑
        dummy = ListNode(0)
        cur = dummy
        carry = 0
        # 同时遍历两个链表,直到全部遍历完且没有剩余进位
        while l1 or l2 or carry:
            # 取两个链表当前节点的值,节点不存在则取0
            val1 = l1.val if l1 else 0
            val2 = l2.val if l2 else 0
            # 计算当前位总和加上次进位
            total = val1 + val2 + carry
            # 当前位的值是总和取模10
            cur.next = ListNode(total % 10)
            # 新的进位是总和整除10
            carry = total // 10
            # 指针后移
            cur = cur.next
            if l1:
                l1 = l1.next
            if l2:
                l2 = l2.next
        return dummy.next

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 11:00:04