添加两个数字链表

Posted

技术标签:

【中文标题】添加两个数字链表【英文标题】:Add Two Numbers Linked List 【发布时间】:2018-03-31 02:36:46 【问题描述】:

我有一个关于使用 LeetCode 的链表添加两个数字的问题。 以下是问题本身、我面临的问题以及我的代码。

给定两个非空链表,代表两个非负数 整数。这些数字以相反的顺序存储,并且它们的每个 节点包含一个数字。将这两个数字相加并将其作为 链表。

您可以假设这两个数字不包含任何前导零,除了 数字 0 本身。

例子

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 解释: 342 + 465 = 807。

问题是它打印出来了:

Error:
A: 7
B: 7
C: 7
A: 10
B: 0
Exception in thread "main" java.lang.NullPointerException
at Solution.addTwoNumbers(MainClass.java:61)
at MainClass.main(MainClass.java:123)

result.val 为 0 时停止并调用 NullPointerException。我不太了解这部分,因为我认为在 Java 中值 0 与 NullPointerException 不同。有人可以帮我吗?谢谢。

public ListNode addTwoNumbers(ListNode l1, ListNode l2) 
    ListNode result = new ListNode(0);
    int up = 0;
    ListNode num1 = l1, num2 = l2;

    while (num1 != null || num2 != null)
        int sum = 0;
        int prevUp = 0;

        if (num1 != null && num2 == null)
            sum = num1.val + up;
            if (sum >= 10)
                up = 1;
                sum = sum - 10;
            
            num1 = num1.next;
            result.val = sum;
            result = result.next;
        
        else if (num2 != null && num1 == null)
            sum = num2.val + up;
            if (sum >= 10)
                up = 1;
                sum = sum - 10;
            
            num2 = num2.next;
            result.val = sum;
            result = result.next;
        
        else
            sum = num1.val + num2.val;
            System.out.println("A: "+ sum);
            if (sum >= 10)
                prevUp = up;
                up = 1;
                sum = sum - 10;
            
            System.out.println("B: " + sum);
            num1 = num1.next;
            num2 = num2.next;
            result.val = sum + prevUp;
            System.out.println("C: " + result.val);
            result = result.next;
        
    

    return result;

【问题讨论】:

原因是结果列表中只有一个节点,因为您将其定义为 ListNode(0)。所以在下一次迭代中它没有任何节点。 【参考方案1】:

由于result = result.next的原因,它抛出Null指针异常,而result只有一个节点并且你已经初始化为 result = new listNode(0);

【讨论】:

【参考方案2】:

它给出 NullPointerException 的原因是您已经定义了只有一个节点的 ResultList。

当你找到result.next == null时,最好添加新节点

【讨论】:

【参考方案3】:

在这里,您可以使用引用变量来遍历 LinkedList

ListNode result = new ListNode(0);
ListNode p = result;

【讨论】:

以上是关于添加两个数字链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 Java 版玩转链表链表面试题及个人题解

何为链表链表示例以及翻转链表

算法链表链表相关问题总结

添加两个数字链表

数据结构-链表链表的基本操作

数据结构-链表链表的相关算法