You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contain a single digit. Add the two numbers and return it as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
Follow up:
What if you cannot modify the input lists? In other words, reversing the lists is not allowed.
Example:
Input: (7 -> 2 -> 4 -> 3) + (5 -> 6 -> 4) Output: 7 -> 8 -> 0 -> 7
思路:用2个stack
1 class Solution { 2 public ListNode addTwoNumbers(ListNode l1, ListNode l2) { 3 Stack<Integer> s1 = new Stack<Integer>(); 4 Stack<Integer> s2 = new Stack<Integer>(); 5 while(l1!=null){ s1.push(l1.val);l1=l1.next;} 6 while(l2!=null){ s2.push(l2.val);l2=l2.next;} 7 int sum = 0; 8 ListNode list = new ListNode(0); 9 while(!s1.empty()||!s2.empty()){ 10 if(!s1.empty()) sum +=s1.pop(); 11 if(!s2.empty()) sum +=s2.pop(); 12 list.val = sum%10; 13 ListNode head = new ListNode(sum/10); 14 head.next = list; 15 list = head; 16 sum /=10; 17 } 18 return list.val==0 ? list.next : list; 19 } 20 }