2. 两数相加

题目:https://leetcode-cn.com/problems/add-two-numbers/

代码:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        if(l1==null && l2==null){
            return null;
        }
        int n1 = l1==null?0:l1.val;
        int n2 = l2==null?0:l2.val;
        int sum = n1+n2;
        ListNode res = new ListNode(sum%10);
        if(sum>=10){
            ListNode next = new ListNode(sum/10);
            res.next = next;
        }
        if(l1!=null){
            res.next = addTwoNumbers(l1.next,res.next);
        }
        if(l2!=null){
            res.next = addTwoNumbers(l2.next,res.next);
        }
        return res;
    }
}

思路:该题目其实想表达的就是让我们实现类似竖式计算这种形式。只是加上了链表这种数据结构导致比较难受。

注意:

1、在l1和l2都为null的时候,不能直接返回一个值为0的ListNode。要不然会出现如:123+123=2460000这样的结果导致不正确。

2、需要处理sum值大于10的时候进1的情况,这里直接使用了递归2次,使用res.next值分别跟l1和l2的next各自做一次加的计算。

3、l1跟l2在null的时候要认为其val值为0,否则遇到123+12这种情况时sum=n1+n2会有空指针错误。