public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode ans = null, cur = null;
int carry = 0;
for (int sum, val;
l1 != null || l2 != null;
l1 = l1 != null ? l1.next : null,
l2 = l2 != null ? l2.next : null
) {
sum = (l1 != null ? l1.val : 0)
+ (l2 != null ? l2.val : 0)
+ carry;
val = sum % 10;
carry = sum / 10;
if (ans == null) {
ans = new ListNode(val);
cur = ans;
} else {
cur.next = new ListNode(val);
cur = cur.next;
}
}
if (carry != 0) {
cur.next = new ListNode(carry);
}
return ans;
}