这题是考察链表结构, 所以用recursion做, 但是也可以用两根指针来回变换, 我因为看到题目就想到recursion 就用recursion了。
最开始的时候就在一个function里面写的, 后来发现, carry 每次都会变幻为初始化的0, 意识到可能还得重新写个function。。。就是下面这个helper。
由于是链表, 所以最要小心点雷区就是null point exception这个异常。怎么解决呢? 就是先判断当前节点是不是为空, 如果为空,下个节点就必然为空, 要先判断一下。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public int carry = 0;
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode result = add(l1, l2, 0);
return result;
}
public ListNode add(ListNode l1, ListNode l2, int carry){
ListNode result = new ListNode(0);
if(l1 == null && l2 == null && carry == 0) return null;
// if(l1 == null) l1.val = 0;
int l1Value = (l1 == null? 0: l1.val);
// if(l2 == null) l2.val = 0;
int l2Value = ((l2 == null)?0:l2.val);
// int carry = carry;
int value = l1Value + l2Value + carry;
// System.out.print(carry + "\n");
carry = value / 10;
value = value % 10;
// System.out.print(carry + "\n");
result.val = value;
result.next = add(l1== null?null:l1.next, l2 == null? null:l2.next, carry);
return result;
}
}