我正在练习算法并求解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:无法读取null的属性'val'”。
答案 0 :(得分:0)
对于错误“ TypeError:无法读取null的'val'属性”,我建议您将条件更改为,
if( current && current.val){
因为您当前获取的是null,并且您无法访问任何null属性(在这种情况下为val)。