Добавление двух чисел, где каждый номер находится в связанном списке в обратном порядке - PullRequest
1 голос
/ 29 марта 2019

Я практикую алгоритмы и решаю https://leetcode.com/problems/add-two-numbers/. Я делаю это в JavaScript. Я могу получить правильный номер, но не могу вернуть ответ в виде обратного связанного списка. Может кто-нибудь помочь мне найти ошибку в моем коде и завершить этот последний шаг?

Мне удалось выполнить итерацию в обоих списках, используя unshift (добавив каждый в начало массива). Затем сделал соединение с массивами и вызвал parseInt для преобразования их в целые числа. Добавление их тривиально, поэтому никаких проблем нет. Проблема для меня заключается в том, что функция должна возвращать связанный список (в обратном порядке). Я не могу успешно получить доступ к значению вновь созданного узла. Конечно, я не думаю, что они использовали синтаксис es6 в классе LinkedList, но все же.

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 Я получаю сообщение об ошибке во время выполнения "Ошибка типа: не удалось прочитать свойство 'val' из null".

1 Ответ

0 голосов
/ 29 марта 2019

В случае ошибки «Ошибка типа: невозможно прочитать свойство« val », равное нулю», я бы предложил изменить ваше условие на

if( current && current.val){

Поскольку вы получаете нулевое значение в текущем и вы не можете получить доступ к любому свойству (в данном случае val) нулевого значения.

...