JS算法题之两数相加使用说明
题目描述
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807
解答
这题不难,不过稍微有点复杂,涉及到了链表,同时考擦了js大数的运算情况。
先遍历两个链表获得对应的数字,然后相加,最后反推算出结果对应的链表即可。
9;
}
return res.replace(/^0+/, ”);
}
var addTwoNumbers = function(l1, l2) {
let num1 = ”, num2 = ”, cur;
cur = l1;
while(cur){
num1 += cur.val.toString();
cur = cur.next;
}
cur = l2;
while(cur){
num2 += cur.val.toString();
cur = cur.next;
}
num1 = num1.split(”).reverse().join(”);
num2 = num2.split(”).reverse().join(”);
let total;
if(num1.length > 21 || num2.length > 21){
total = addBigNumber(num1, num2)
}
else{
total = Number(num1) + Number(num2)
}
total = total.toLocaleString().toString().split(”).reverse().join(”).replace(/,/g, ”)
console.log(num1, num2, total)
let l3 = ListNode(total[0]);
cur = l3;
for(let i = 1; i
function ListNode(val) {
this.val = val;
this.next = null;
return {
val: this.val,
next: null
}
}
function addBigNumber(a, b) {
var res = '',
temp = 0;
a = a.split('');
b = b.split('');
while (a.length || b.length || temp) {
temp += ~~a.pop() + ~~b.pop();
res = (temp % 10) + res;
temp = temp > 9;
}
return res.replace(/^0+/, '');
}
var addTwoNumbers = function(l1, l2) {
let num1 = '', num2 = '', cur;
cur = l1;
while(cur){
num1 += cur.val.toString();
cur = cur.next;
}
cur = l2;
while(cur){
num2 += cur.val.toString();
cur = cur.next;
}
num1 = num1.split('').reverse().join('');
num2 = num2.split('').reverse().join('');
let total;
if(num1.length > 21 || num2.length > 21){
total = addBigNumber(num1, num2)
}
else{
total = Number(num1) + Number(num2)
}
total = total.toLocaleString().toString().split('').reverse().join('').replace(/,/g, '')
console.log(num1, num2, total)
let l3 = ListNode(total[0]);
cur = l3;
for(let i = 1; i < total.length; i++){
let node = ListNode(total[i]);
cur.next = node;
cur = node;
}
return l3;
};