public ListNode addInList (ListNode head1, ListNode head2) {
ListNode p1 = reverse(head1);
ListNode p2 = reverse(head2);
ListNode newHead = new ListNode(0);
ListNode p = newHead;
int carry = 0;
while (p1 != null || p2 != null || carry > 0) {
int x, y;
if (p1 == null) {
x = 0;
} else {
x = p1.val;
p1 = p1.next;
}
if (p2 == null) {
y = 0;
} else {
y = p2.val;
p2 = p2.next;
}
int add = x + y + carry;
p.next = new ListNode(add % 10);
p = p.next;
carry = add / 10;
}
return reverse(newHead.next);
}
public ListNode reverse(ListNode head){
ListNode pre = null;
ListNode curr = head;
while (curr != null) {
ListNode temp = curr.next;
curr.next = pre;
pre = curr;
curr = temp;
}
return pre;
}