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
相关产品推荐
相关产品推荐

