[英]Adding two numbers in the form of a linked list
我是JavaScript的新手,我正在尝试解决这个问题:
给定两个非空链表,代表两个非负整数。 这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。 将这两个数字相加并将其作为链表返回。
这是我的解决方案:
addTwoNumbers = (l1, l2) => {
let carry = 0;
let p = curr = new ListNode(0);
while (l1 || l2) {
sum = 0;
if (l1 && l2) {
sum = l1.val + l2.val + carry;
} else if (l1) {
sum = l1.val + carry;
} else if (l2) {
sum = l2.val + carry;
}
carry = sum % 10;
sum = sum / 10;
curr.next = new ListNode(sum);
curr = curr.next;
}
return p.next
};
LL的定义在这里,
class ListNode{
constructor(val){
this.val = val;
this.next = null;
}
}
这进入了无限循环。
我刚接触JavaScript,正在尝试解决此问题:
您将获得两个表示两个非负整数的非空链表。 这些数字以相反的顺序存储,并且它们的每个节点都包含一个数字。 将两个数字相加,然后将其作为链表返回。
这是我的解决方案:
addTwoNumbers = (l1, l2) => {
let carry = 0;
let p = curr = new ListNode(0);
while (l1 || l2) {
sum = 0;
if (l1 && l2) {
sum = l1.val + l2.val + carry;
} else if (l1) {
sum = l1.val + carry;
} else if (l2) {
sum = l2.val + carry;
}
carry = sum % 10;
sum = sum / 10;
curr.next = new ListNode(sum);
curr = curr.next;
}
return p.next
};
LL的定义在这里,
class ListNode{
constructor(val){
this.val = val;
this.next = null;
}
}
这进入了无限循环。
这是我的版本:
const addTwoNumbers = (l1, l2) => {
let carry = 0;
let curr = new ListNode(0);
let p = curr;
while (l1 || l2) {
const sum = (l1?.val || 0) + (l2?.val || 0) + carry;
l1=l1?.next;
l2=l2?.next;
carry = sum > 9 ? 1 : 0;
curr.next = new ListNode(sum % 10);
curr = curr.next;
}
if(!!carry) {
curr.next = new ListNode(1);
}
return p.next;
};
另一个解决方案:
const toArray = (l) => {
const arr = []
while(l) {
arr.push(l.val)
l = l.next;
}
return arr
}
const toList = (arr) => {
let curr = new ListNode(0);
let p = curr;
for(const el of arr) {
curr.next = new ListNode(el);
curr = curr.next
}
return p.next;
}
const addTwoNumbers = (l1, l2) => {
const la1 = toArray(l1)
const la2 = toArray(l2)
const len1 = la1.length
const len2 = la2.length
const lenMax = len1 > len2 ? len1 : len2
let carry = 0;
const result = []
for (let i = 0; i < lenMax; i++) {
const sum = (la1[i] || 0) + (la2[i] || 0) + carry;
carry = sum > 9 ? 1 : 0;
result.push(sum % 10);
}
carry && result.push(1)
return toList(result)
};
为什么这是不正确的?
var addTwoNumbers = function (l1, l2) {
let num1 = parseInt(reverse(l1).join(''));
let num2 = parseInt(reverse(l2).join(''));
const newArr = Array.from(String(num1+num2), Number);
return reverse(newArr);
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.