有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java添加两个数字链表

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

You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contains a single digit. Add the two numbers and return it as a linked list.

You may assume the two numbers do not contain any leading zero, except the number 0 itself.

Example

Input: (2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 0 -> 8 Explanation: 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)

当结果出现时,它停止。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;
}

共 (3) 个答案

  1. # 1 楼答案

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

    ListNode result = new ListNode(0);
    ListNode p = result;
    
  2. # 2 楼答案

    由于result=result的原因,它正在抛出Null指针异常。next,而result只有一个节点,您已初始化为 result=new listNode(0)

  3. # 3 楼答案

    它之所以给出NullPointerException是因为您只定义了一个节点的结果列表

    当你发现result.next == null时,你更喜欢向它添加新节点