1 public static ListNode add(ListNode l1, ListNode l2){
2
3 Stack<Integer> s1 = new Stack<Integer>();
4 Stack<Integer> s2 = new Stack<Integer>();
5 while(l1!=null){
6 s1.push(l1.val);
7 l1 = l1.next;
8 }
9 while(l2!=null){
10 s2.push(l2.val);
11 l2 = l2.next;
12 }
13 int carry = 0;
14 ListNode safe = new ListNode(-1);
15 ListNode p = safe.next;
16 while(!s2.isEmpty() &&!s1.isEmpty()){
17 int d1 = s1.pop();
18 int d2 = s2.pop();
19 safe.next = new ListNode((d1+d2+carry)%10);
20 safe.next.next = p;
21 p=safe.next;
22 carry = (d1+d2)/10;
23 }
24 while(!s1.isEmpty()){
25 int d1 = s1.pop();
26 safe.next = new ListNode((d1+carry)%10);
27 safe.next.next = p;
28 p = safe.next;
29 carry = (d1+carry)/10;
30 }
31 while(!s2.isEmpty()){
32 int d2 = s2.pop();
33 safe.next = new ListNode((d2+carry)%10);
34 safe.next.next = p;
35 p = safe.next;
36 carry = (carry+d2)/10;
37 }
38 if(carry>0){
39 safe.val = carry;
40 return safe;
41 }
42 else return safe.next;
43 }