三个栈 完美解决,JAVA YYDS

import java.util.*;
public class Solution {
    /**
     * 
     * @param head1 ListNode类 
     * @param head2 ListNode类 
     * @return ListNode类
     */
     //保存head1的值
    Stack<Integer> stack1 = new Stack<>();
     //保存head2的值
    Stack<Integer> stack2 = new Stack<>();
    //保存计算结果的值
    Stack<Integer> stack3 = new Stack<>();
    public ListNode addInList (ListNode head1, ListNode head2) {
        // write code here
        while(head1!=null){
            stack1.push(head1.val);
            head1 = head1.next;
        }   
        //stack1 = {9 3 7};
         while(head2!=null){
            stack2.push(head2.val);
            head2 = head2.next;
        }
       //stack2 = {6,3};
       //记录进位
        int prv = 0;
        while(!stack1.isEmpty() || !stack2.isEmpty()){
             //如果栈1为空
             if(stack1.isEmpty()){
                 //弹出栈2的顶部 + 进位值
                 int p2 = stack2.pop();
                if(p2 + prv >= 10){
                   //大于10 和 减去 10 压入栈3 同时需进一位
                    stack3.push((p2 + prv) - 10);  
                    //进位值设为1
                    prv = 1;
                }else{
                     stack3.push(p2 + prv); 
                    prv = 0;
                }
                 continue;
            }
            //同上面
             if(stack2.isEmpty()){
                int p2 = stack1.pop();
                if(p2 + prv >= 10){
                    stack3.push((p2 + prv) - 10);  
                    prv = 1;
                }else{
                     stack3.push(p2 + prv); 
                    prv = 0;
                }
                 continue;
            }
           //如果都不为空 ,同时取出来栈顶 如 7 跟 3
            if(!stack1.isEmpty() && !stack2.isEmpty()){
                int p1 = stack1.pop();
                int p2 = stack2.pop();
                // 7 +3 + 0 > =10
                if(p1 + p2 + prv >= 10){
                    stack3.push((p1 + p2 + prv) - 10);  
                    prv = 1;
                }else{
                 //如果加上进位值都小于10 进位值已被使用 初始化为0
                     stack3.push(p1 + p2 + prv); 
                     prv = 0;
                }
            }
        }
        //两个栈都弹完了 判断进位还有没有 有就直接压入栈3顶 
        if(prv == 1) stack3.push(prv);
        //栈3 的顺序 0 0 0 1
        //构建链表
        ListNode node = new ListNode(0);
        ListNode cru = node;
        while(!stack3.isEmpty()){
            int val = stack3.pop();
            cru.next = new ListNode(val);
            cru = cru.next; 
        } 
      return node.next;
    }
}