题目
思路
总体上可以分为两类,迭代和递归
- 迭代
迭代链表在边界判断上具有许多方式,这里选择将两条链表看成是相等长度的,在内部实现保证迭代不出错即可,详细看代码 - 递归
待完善
代码
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
// case 1
if (l1 === null && l2 === null) return null;
let p1 = l1, p2 = l2, dummy: ListNode = new ListNode(), p: ListNode = new ListNode();
let carry = 0;
while (p1 !== null || p2 !== null) {
const n1 = p1 === null ? 0 : p1.val;
const n2 = p2 === null ? 0 : p2.val;
const num = n1 + n2 + carry;
carry = Math.floor(num / 10); // JavaScript不是整除
// 将两条链视为相等长度
if (p1 !== null) {
dummy.next = l1;
p = p1
p1.val = num % 10;
p1 = p1.next
}
if (p2 !== null) {
dummy.next = l2;
p = p2;
p2.val = num % 10;
p2 = p2.next;
}
}
if (carry !== 0) {
p.next = new ListNode(carry)
}
return dummy.next;
};