
reverse
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode r1 = reverse(l1);
ListNode r2 = reverse(l2);
int carry = 0;
ListNode dummy = new ListNode();
ListNode cur = dummy;
while (r1 != null || r2 != null || carry != 0) {
int num1 = r1 == null ? 0 : r1.val;
int num2 = r2 == null ? 0 : r2.val;
int sum = num1 + num2 + carry;
int curSum = sum % 10;
carry = sum / 10;
cur.next = new ListNode(curSum);
cur = cur.next;
r1 = r1 == null ? null : r1.next;
r2 = r2 == null ? null : r2.next;
}
return reverse(dummy.next);
}
public ListNode reverse(ListNode node) {
ListNode pre = null, cur = node;
while (cur != null) {
ListNode tmp = cur.next;
cur.next = pre;
pre = cur;
cur = tmp;
}
return pre;
}
}
stack
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
Stack<Integer> s1 = new Stack<>();
Stack<Integer> s2 = new Stack<>();
while (l1 != null) {
s1.push(l1.val);
l1 = l1.next;
}
while (l2 != null) {
s2.push(l2.val);
l2 = l2.next;
}
int carry = 0;
ListNode pre = null, cur = null;
while (!s1.isEmpty() || !s2.isEmpty() || carry != 0) {
int num1 = s1.isEmpty() ? 0 : s1.pop();
int num2 = s2.isEmpty() ? 0 : s2.pop();
int sum = num1 + num2 + carry;
int curSum = sum % 10;
carry = sum / 10;
cur = new ListNode(curSum);
cur.next = pre;
pre = cur;
}
return cur;
}
}