import java.util.*;
import java.lang.*;
public class Solution {
public static ListNode addInList (ListNode head1, ListNode head2) {
Stack<ListNode> stack1 = new Stack<>();
Stack<ListNode> stack2 = new Stack<>();
while (head1 != null){
stack1.push(head1);
head1 = head1.next;
}
while (head2 != null){
stack2.push(head2);
head2 = head2.next;
}
int carryOver = 0;
Stack<ListNode> minStack;
Stack<ListNode> maxStack;
maxStack = stack1.size() > stack2.size() ? stack1 : stack2;
minStack = stack1.size() > stack2.size() ? stack2 : stack1;
ListNode maxNode = null;
while (!minStack.isEmpty() || !maxStack.isEmpty()){
int minValue = 0;
maxNode = maxStack.pop();
if (!minStack.isEmpty()){
minValue = minStack.pop().val;
}
int sum = maxNode.val + minValue + carryOver;
carryOver = (sum - (sum % 10)) / 10;
maxNode.val = sum % 10;
}
if (carryOver != 0){
ListNode root = new ListNode(carryOver);
root.next = maxNode;
return root;
}
return maxNode;
}
}