HOT100——两数相加(JS实现)
原创
©著作权归作者所有:来自51CTO博客作者wb59770b05237ae的原创作品,请联系作者获取转载授权,否则将追究法律责任
题目描述
解题思路
- 拿到链表对应的字符字符串数值,然后将数值反转之后转为BigInt类型,之所以转为BigInt类型的原因在于后期测试用例中有大数形式。
- 将两个数值相加,然后转为字符数组,然后反转。
- 定义一个数组,将字符数组的每一个元素变为相应节点后,添加进数组。
- 遍历这个临时数组,依次改变指针。
- 返回数组的头元素即可。
手绘思路
解题代码
var addTwoNumbers = function(l1, l2) {
function ListNode(val,next) {
this.val = val;
this.next = null;
}
// 拿到链表1的数值
let str1 = '';
let temp1 = l1;
while (temp1 !== null) {
str1 = str1 + temp1.val;
temp1 = temp1.next;
}
str1 = str1.split('').reverse().join('');
let num1 = BigInt(str1);
// 拿到链表2的数值
let str2 = '';
let temp2 = l2;
while (temp2 !== null) {
str2 = str2 + temp2.val;
temp2 = temp2.next;
}
str2 = str2.split('').reverse().join('');
let num2 = BigInt(str2);
let result = num1 + num2;
// 以result为基础倒着建立一个链表
let strResult = String(result).split('');
strResult.reverse();
let res = [];
for (let v of strResult) {
res.push(new ListNode(Number(v)))
};
for (let i = 0 ; i < res.length - 1;i++) {
res[i].next = res[i+1]
}
return res[0]
};
总结(本题给我们的启示思路)
- 本题不是最优解,但是思路较为简单。
- 学会使用JS中的BigInt类型来解决大数问题。
- 学会使用遍历数组来改变节点指针的方法。