Весь код был примерно такой:
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, и так далее.