這題是考察鏈表結(jié)構(gòu), 所以用recursion做, 但是也可以用兩根指針來回變換, 我因為看到題目就想到recursion 就用recursion了。
最開始的時候就在一個function里面寫的, 后來發(fā)現(xiàn), carry 每次都會變幻為初始化的0, 意識到可能還得重新寫個function。。。就是下面這個helper。
由于是鏈表, 所以最要小心點雷區(qū)就是null point exception這個異常。怎么解決呢? 就是先判斷當前節(jié)點是不是為空, 如果為空,下個節(jié)點就必然為空, 要先判斷一下。
/**
* 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;
}
}