题目: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会有空指针错误。