添加两个数字链接列表

时间:2018-03-31 02:36:47

标签: java linked-list

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

  

您将获得两个非空链表,表示两个非负数   整数。数字以相反的顺序存储,每个数字都存储   节点包含一个数字。添加两个数字并将其作为a返回   链表。

     

您可以假设这两个数字不包含任何前导零,除了   数字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;
}

3 个答案:

答案 0 :(得分:0)

提供 NullPointerException 的原因是您已经为ResultList定义了只有一个节点。

当您找到result.next == null

时,首选添加新节点

答案 1 :(得分:0)

由于 result = result.next 的原因,它正在抛出空指针异常,而结果只有一个Node而你已初始化为   result = new listNode(0);

答案 2 :(得分:0)

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

            MemoryStream ms = new MemoryStream();
            new FileStream(Afiladdress, FileMode.Open).CopyTo(ms);
            Bitmap myimage = new Bitmap(ms);

            float Width = myimage.Width / myimage.HorizontalResolution;//in INCHES
            float Height= myimage.Height/ myimage.VerticalResolution;//in INCHES