leetcode-445. Add Two Numbers II
题目:
You are given two linked lists representing two non-negative numbers. 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.
的后继题目,只是把单向链表倒过来,因为是刚出的题目,暂时我还没看到特别好的做法,典型的做法就是用一个栈来保存然后在弹出。这样空间和时间复杂度都是O(n)。以后如果有什么特别好的方法在修改。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
public class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Stack<Integer> sta1 = new Stack<Integer>();
Stack<Integer> sta2 = new Stack<Integer>();
Stack<Integer> sta = new Stack<Integer>();
while(l1!=null) {
sta1.push(l1.val);
l1 = l1.next;
}
while(l2!=null) {
sta2.push(l2.val);
l2 = l2.next;
}
int c = 0;
while(!sta1.isEmpty() && !sta2.isEmpty()){
int sum = sta1.pop()+sta2.pop()+c;
c = sum/10;
sum = sum%10;
sta.push(sum);
}
if(!sta2.isEmpty()) sta1 = sta2;
while(!sta1.isEmpty()){
int sum = sta1.pop()+c;
c = sum/10;
sum = sum%10;
sta.push(sum);
}
if(c==1) sta.push(1);
ListNode dump = new ListNode(0);
ListNode ret = dump;
while(!sta.isEmpty()){
dump.next = new ListNode((int)sta.pop());
dump = dump.next;
}
return ret.next;
}
}