add two numbers

这题是考察链表结构, 所以用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;

}

}

你可能感兴趣的:(add two numbers)