LeetCode 2.Add Two Numbers循环逻辑错误导致长测试用例执行失败
问题原因说明
你当前测试用例失败的直接原因是while l1循环内误用了第一个循环的旧temp变量,剩余的3个9加进位后本应生成的0值全部被错误覆盖,同时最终进位没有新增节点,导致输出长度少1、中间值错误。
全部错误点梳理
- 开头的边界判断逻辑错误:
l1 == [0]是将链表节点对象与列表对比,该判断永远不成立,完全无效。 - 剩余链表处理逻辑变量引用错误:
while l1循环内赋值时误用了第一个循环的临时变量temp,应该用当前循环的temp2;while l2循环不仅误用temp,还错误调用了不存在的属性l2.data,链表节点属性应为val。 - 进位处理逻辑冗余:两个独立
if判断temp >=10和temp <10可合并为else,避免逻辑冲突。 - 最终进位节点新建逻辑缺失:处理完所有链表节点后如果仍有进位,需要新建节点存储进位1,而非直接覆盖当前节点的值。
- 循环内节点新建逻辑位置错误:第一个循环结束时如果还有剩余链表,需要先新建下一个节点再进入剩余链表处理逻辑,否则会丢失第一个剩余节点的存储空间。
修正后简化代码(更易维护,无边界问题)
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]: carry = 0 # 哑节点简化头节点处理逻辑 dummy = ListNode() current = dummy # 统一处理三种情况:l1未遍历完、l2未遍历完、仍有进位 while l1 or l2 or carry: val1 = l1.val if l1 else 0 val2 = l2.val if l2 else 0 total = val1 + val2 + carry # 计算新的进位和当前位数值 carry = total // 10 current.next = ListNode(total % 10) current = current.next # 移动指针 if l1: l1 = l1.next if l2: l2 = l2.next return dummy.next
内容的提问来源于stack exchange,提问作者Irina
相关产品推荐
相关产品推荐

