

LeetCode Hot 100:两数相加
用链表逐位模拟竖式加法,看清 Add Two Numbers 的进位、dummy 头节点和 JavaScript 写法。
这期讲 LeetCode Hot 100 的 Add Two Numbers。题目给出两个非空链表,数字按逆序存放,每个节点只有一位数字;目标是返回两数之和对应的新链表。
核心思路是模拟竖式加法:两个指针同步扫描链表,每轮取当前位相加,再加上上一轮的进位。当前节点写
sum % 10,新的进位写成 Math.floor(sum / 10)。循环条件必须覆盖三种情况:l1 还没走完、l2 还没走完,或者最后还有 carry。function addTwoNumbers(l1, l2) {
const dummy = new ListNode(0);
let tail = dummy;
let carry = 0;
let p = l1;
let q = l2;
while (p !== null || q !== null || carry !== 0) {
const x = p ? p.val : 0;
const y = q ? q.val : 0;
const sum = x + y + carry;
const digit = sum % 10;
carry = Math.floor(sum / 10);
tail.next = new ListNode(digit);
tail = tail.next;
if (p) p = p.next;
if (q) q = q.next;
}
return dummy.next;
}复杂度:设两个链表长度分别为
m 和 n,时间复杂度是 O(m + n);结果链表最多比输入最长链表多一个进位节点,因此额外空间是 O(m + n)。来源
関連コンテンツ
- ログインするとコメントできます。
