返回

两数相加:JavaScript版

前端

JavaScript实现

/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
const addTwoNumbers = (l1, l2) => {
  // 将链表字符字符串数值反转并转为BigInt类型
  const num1 = BigInt(String(listToNumber(l1)).split("").reverse().join(""));
  const num2 = BigInt(String(listToNumber(l2)).split("").reverse().join(""));

  // 将两个数值相加并转回字符串
  const sum = String(num1 + num2);

  // 将结果字符串反转并转为链表
  return numberToList(sum.split("").reverse().join(""));
};

// 将链表转换为数字
const listToNumber = (list) => {
  let num = 0;
  while (list) {
    num = num * 10 + list.val;
    list = list.next;
  }
  return num;
};

// 将数字转换为链表
const numberToList = (num) => {
  const head = new ListNode(0);
  let curr = head;
  while (num > 0) {
    const digit = num % 10;
    num = Math.floor(num / 10);
    curr.next = new ListNode(digit);
    curr = curr.next;
  }
  return head.next;
};

示例:

const l1 = [2, 4, 3];
const l2 = [5, 6, 4];
const result = addTwoNumbers(l1, l2);
console.log(result); // [7, 0, 8]

复杂度分析:

  • 时间复杂度:O(n),其中n是链表的长度。
  • 空间复杂度:O(n),因为我们需要创建一个新的链表来存储结果。

结论:

本文提供了「两数相加」问题的JavaScript解决方案。我们采用了暴力解法,将链表字符字符串数值反转并转为BigInt类型,以解决大数形式下的相加问题。希望本教程对您有所帮助!