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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:57:01