import java.util.*;
/*
* public class ListNode {
* int val;
* ListNode next = null;
* }
*/
public class Solution {
/**
*
* @param head1 ListNode类
* @param head2 ListNode类
* @return ListNode类
*/
public ListNode addInList (ListNode head1, ListNode head2) {
// write code here
//借助栈来实现
if(head1 == null){
return head2;
}
if(head2 == null){
return head1;
}
Stack<ListNode> s1 = new Stack();
Stack<ListNode> s2 = new Stack();
Stack<ListNode> res = new Stack();
while(head1 != null){
s1.push(head1);
head1 = head1.next;
}
while(head2 != null){
s2.push(head2);
head2 = head2.next;
}
//依次出栈并相加 放入res
boolean isNeedAddOne = false;
while(!s1.isEmpty() || !s2.isEmpty()){
int n1 = 0;
int n2 = 0;
ListNode cur = null;
if(!s1.isEmpty()){
cur = s1.pop();
n1 = cur.val;
}
if(!s2.isEmpty()){
cur = s2.pop();
n2 = cur.val;
}
int sum = n1 + n2;
if(isNeedAddOne){
sum += 1;
}
if(sum >= 10){
isNeedAddOne = true;
int ge = sum % 10;
cur.val = ge;
} else {
isNeedAddOne = false;
cur.val = sum;
}
res.push(cur);
}
if(isNeedAddOne){
ListNode last = new ListNode(1);
res.push(last);
}
ListNode head = res.pop();
ListNode result = head;
while(!res.isEmpty()){
result.next = res.pop();
result = result.next;
}
return head;
}
}