【问题标题】:Adding two numbers where each number is in a linked list in reverse order添加两个数字,其中每个数字以相反的顺序在链表中
【发布时间】: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


【解决方案1】:

对于错误“TypeError: Cannot read property 'val' of null”,我建议你把你的条件改成,

if( current && current.val){

因为您在 current 中获得了 null,并且您无法访问 null 的任何属性(在本例中为 val)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 2021-09-24
    • 2015-05-04
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多