Переход от curr.next к curr дает мне исключение nullpointerException. Почему? - PullRequest
0 голосов
/ 08 марта 2020

Весь код был примерно такой:

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {        
    ListNode dummyHead = new ListNode(0);
    ListNode curr = dummyHead, p = l1, q = l2;
    int carry = 0;
    int sum;

    while(p != null || q != null){
        int x = (p != null)? p.val:0;
        int y = (q != null)? q.val:0;

        sum = x + y + carry;
        carry = sum/10;
        curr.next = new ListNode(sum%10); // What if I change it to curr.val = sum%10?
        curr = curr.next;

        if(p != null) p = p.next;
        if(q != null) q = q.next;
    }

    if(carry > 0){

        curr.next = new ListNode(carry);

    }        
    return dummyHead.next; // If the change I made above works, then I just return dummyHead            
}

Мне просто интересно, почему бы просто не использовать curr.val = sum%10 вместо curr.next = new ListNode(sum%10)? И потом, в конце концов, вместо возврата dummyHead.next, мы можем вернуть dummyHead, звучит разумно, верно? Я внес изменение, но получил исключение nullpointerException. Почему? Почему dummyHead или curr всегда равны нулю? Итак, в основном я пытался сделать так, чтобы на каждой итерации я вычислял сумму, а затем назначал ее для curr.val, а затем изменял curr на next, и так далее.

...