添加两个数字链表
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;
【讨论】:
以上是关于添加两个数字链表的主要内容,如果未能解决你的问题,请参考以下文章