0002. Add Two Numbers #
题目 #
- 给定两个 非空 链表,表示两个非负整数。
- 每位数字均按 逆序 方式存储,每个节点只存储一位数字。
- 将两个数相加,并以相同形式返回一个表示和的链表。
- 假定除数字
0
之外,这两个数均不会以0
开头。
解释 342 + 465 = 807
思路 #
模拟 #
代码 #
模拟 #
public class ListNode {
int val;
ListNode next;
ListNode() {}
ListNode(int val) { this.val = val; }
ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
class Solution {
public ListNode recursive(ListNode l1, ListNode l2, int carry) {
if (l1 == null && l2 == null) {
return carry != 0 ? new ListNode(carry, null) : null;
}
else if (l1 != null && l2 == null) {
return new ListNode((l1.val + carry) % 10, recursive(l1.next, null, (l1.val + carry) / 10));
}
else if (l1 == null && l2 != null) {
return new ListNode((l2.val + carry) % 10, recursive(null, l2.next, (l2.val + carry) / 10));
}
else {
ListNode node = new ListNode((l1.val + l2.val + carry) % 10, null);
node.next = recursive(l1.next, l2.next, (l1.val + l2.val + carry) / 10);
return node;
}
}
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
return recursive(l1, l2, 0);
}
}