返回
两数相加:JavaScript版
前端
2023-09-25 08:03:04
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类型,以解决大数形式下的相加问题。希望本教程对您有所帮助!