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

LeetCode两数相加(Add Two Numbers)用例3调试求助

Add Two Numbers 代码错误分析与修复

问题诊断

你的代码存在三个关键错误,导致输出不符合预期:

  1. 链表指针移动逻辑错误
    原代码中移动l1和l2的逻辑:

    if (l1 != null && l1.next != null) {
        l1 = l1.next;
    } else l1 = null;
    

    该逻辑错误地将最后一个节点直接置为null,而非移动到next指针(即使next为null),导致后续循环中节点处理不完整,进位逻辑混乱。

  2. 重复处理进位
    循环内部额外添加的进位判断完全多余:

    if (l1 == null && l2 == null && carry != 0) {
        current.next = new ListNode(carry, current.next);
    }
    

    你的循环条件已经包含carry != 0,当l1、l2都为空但进位存在时,循环会自动执行一次处理进位,这段代码会导致进位被重复添加,产生多余节点。

  3. 新节点创建方式错误
    原代码使用current.next = new ListNode(remainder, current.next);创建节点,该写法是在current的next位置插入新节点,而非追加到链表末尾,导致节点顺序和结构混乱。

修正后的代码

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) {
 *         this.val = val; 
 *     }
 *     ListNode(int val, ListNode next) { 
 *         this.val = val; 
 *         this.next = next; 
 *     }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        ListNode answer = new ListNode();
        ListNode current = answer;
        int carry = 0;
        
        while(l1 != null || l2 != null || carry != 0) {
            int l1_value = l1 != null ? l1.val : 0;
            int l2_value = l2 != null ? l2.val : 0;
            
            int total = l1_value + l2_value + carry;
            int remainder = total % 10;
            carry = total / 10;
            
            // 正确创建节点并追加到链表末尾
            current.next = new ListNode(remainder);
            current = current.next;
            
            // 正确移动链表指针
            if(l1 != null) {
                l1 = l1.next;
            }
            if(l2 != null) {
                l2 = l2.next;
            }
        }
        return answer.next;
    }
}

验证说明

针对测试用例l1 = [9,9,9,9,9,9,9],l2 = [9,9,9,9],修正后的代码会按位计算和与进位:

  • 前四位相加均产生进位1,依次得到余8、9、9、9;
  • 后续处理l1剩余的三个9,加上进位1后依次得到余0、0、0,进位1;
  • 最后处理剩余进位1,添加节点1;
    最终输出为[8,9,9,9,0,0,0,1],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:14:53