将两个数字相加,每个数字在反向列表中

时间:2019-03-29 04:59:45

标签: javascript algorithm data-structures linked-list

我正在练习算法并求解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'”。

1 个答案:

答案 0 :(得分:0)

对于错误“ TypeError:无法读取null的'val'属性”,我建议您将条件更改为,

if( current && current.val){

因为您当前获取的是null,并且您无法访问任何null属性(在这种情况下为val)。