【发布时间】:2019-03-29 04:59:44
【问题描述】:
我正在练习算法并解决https://leetcode.com/problems/add-two-numbers/。我在 JavaScript 中这样做。我能够获得正确的数字,但无法将答案作为反向链接列表返回。有人可以帮我找出代码中的错误并完成最后一步吗?
我能够通过使用 unshift 向后迭代两个链表(将每个链表添加到数组的前面)。然后对数组进行连接并调用 parseInt 将它们转换为整数。添加它们是微不足道的,所以那里没有问题。对我来说,问题在于函数应该返回一个链表(倒序)。我无法成功访问新创建节点的值。当然,我认为他们没有在 LinkedList 类中使用 es6 语法,但仍然如此。
function ListNode(val) {
this.val = val;
this.next = null;
}
@param {ListNode} l1
@param {ListNode} l2
@return {ListNode}
var addTwoNumbers = function(l1, l2) {
let num1 = [];
let num2 = [];
let current1 = l1;
let current2 = l2;
while(current1){
num1.unshift(current1.val);
current1 = current1.next;
console.log(num1);
}
while(current2){
num2.unshift(current2.val);
current2 = current2.next;
console.log(num2);
}
let number1 = parseInt(num1.join(''));
console.log(number1);
let number2 = parseInt(num2.join(''));
console.log(number2);
console.log("Number 1 is " + number1);
console.log("Number 2 is " + number2);
let result = number1 + number2;
console.log(result);
let liststr = result.toString();
console.log(liststr);
let node = new ListNode();
let current = node;
for (let i = liststr.length - 1; i >= 0; i--){
if(current.val !== undefined){
node.next = new ListNode(liststr[i]);
current = current.next;
}
else {
node.value = liststr[i];
current = current.next;
}
}
return node;
};
Input: (2 -> 4 -> 3) + (5 -> 6 -> 4)
Expected Output: 7 -> 0 -> 8
Explanation: 342 + 465 = 807.
807 应该转换成链表 7->0->8
我收到运行时错误“TypeError: Cannot read property 'val' of null”。
【问题讨论】:
-
current = current.next在您的else条件下。循环开始时,next到底是什么?此外,将其更改为数组会破坏使用链表的目的。
标签: javascript algorithm data-structures linked-list