https://leetcode-cn.com/problems/add-two-numbers/
-
模拟
public ListNode addTwoNumbers(ListNode l1, ListNode l2) { ListNode head=null,tail=null; int carry=0; while (l1!=null||l2!=null){ int n1 = l1!=null?l1.val:0; int n2 = l2!=null?l2.val:0; int sum = n1+n2+carry; if(head==null){ head=tail=new ListNode(sum%10); }else{ tail.next = new ListNode(sum%10); tail = tail.next; } carry = sum/10; if(l1!=null){ l1=l1.next; } if(l2!=null){ l2=l2.next; } } if(carry>0){ tail.next = new ListNode(carry); } tail.next=null; return head; }
递归
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
return dfs(l1,l2,0);
}
private ListNode dfs(ListNode l1, ListNode l2, int i) {
if(l1==null&&l2==null&&i==0) return null;
int sum = (l1!=null?l1.val:0)+(l2!=null?l2.val:0)+i;
ListNode node = new ListNode(sum%10);
node.next = dfs(l1==null?null:l1.next,l2==null?null:l2.next,sum/10);
return node;
}