Question
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.

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`

stack法

【复杂度】

【思路】

【注意】

【代码】

`/** * 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) {        //require        ListNode ans=null;        Stack<ListNode> stack1=new Stack<ListNode>(),stack2=new Stack<ListNode>();        //invariant        while(l1!=null||l2!=null){            if(l1!=null){                stack1.push(l1);                l1=l1.next;            }            if(l2!=null){                stack2.push(l2);                l2=l2.next;            }        }        int a=0,b=0,carry=0,sum=0;        while(!stack1.isEmpty()||!stack2.isEmpty()){            if(!stack1.isEmpty())                a=stack1.pop().val;            else                a=0;            if(!stack2.isEmpty())                b=stack2.pop().val;            else                b=0;            sum=a+b+carry;            ListNode tmp=new ListNode(sum%10);            tmp.next=ans;            ans=tmp;            carry=sum/10;        }        if(carry!=0){            ListNode tmp=new ListNode(carry);            tmp.next=ans;            ans=tmp;         }        //ensure        return ans;    }}`