You are given two linked lists representing two non-negative numbers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Output: 7 -> 0 -> 8
Analysis:Output: 7 -> 0 -> 8
Need to create a new ListNode other than the returned one. Because each iteration would cause the new ListNode point to its next node, keep the head is necessary.
Solution:
1: /**
2: * Definition for singly-linked list.
3: * public class ListNode {
4: * int val;
5: * ListNode next;
6: * ListNode(int x) {
7: * val = x;
8: * next = null;
9: * }
10: * }
11: */
12: public class Solution {
13: public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
14: int carry=0;
15: ListNode result=new ListNode(0);
16: ListNode l3=result;
17: while(l1!=null || l2!=null)
18: {
19: if(l1!=null)
20: {
21: carry+=l1.val;
22: l1=l1.next;
23: }
24: if(l2!=null)
25: {
26: carry+=l2.val;
27: l2=l2.next;
28: }
29: l3.next=new ListNode(carry%10);
30: carry/=10;
31: l3=l3.next;
32: }
33: if(carry==1)
34: {
35: l3.next=new ListNode(1);
36: }
37: return result.next;
38: }
39: }