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;
}
复杂度:设两个链表长度分别为 mn,时间复杂度是 O(m + n);结果链表最多比输入最长链表多一个进位节点,因此额外空间是 O(m + n)

来源

관련 콘텐츠

  • 로그인하면 댓글을 작성할 수 있습니다.
More from this channel