445. Add Two Numbers II



 

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 }

 

 

 
posted @ 2017-10-26 08:59  乐乐章  阅读(117)  评论(0编辑  收藏  举报