Answer

Answer

t.me/js_test

Ответ:

function* getReverseListValues(list) {
    if (list.next) {
        yield* getReverseListValues(list.next);
    }

    yield list.value;
}


function* getReverseListValues(list) {
    const arr = [];
    let tmp = list;

    while (tmp) {
        arr.push(tmp.value);
        tmp = tmp.next;
    }

    for (let i = arr.length - 1; i >= 0; i--) {
        yield arr[i];
    }
}

Объяснение:

Данную задачу можно решить двумя способами, использовать рекурсию или использовать цикл. В первом случае нужно проверить есть ли в текущей ноде поле next и если есть то продолжить рекурсию с помощью оператора yield*, так наш код дойдёт до последней ноды и начнёт выводить значения с конца. Во втором случае нужно создать массив и сложить в него все значения в нормальном порядке, а возвращать эти значения уже в обратном порядке.

Код для проверки:

const linkedList = {
    value: 1,
    next: {
        value: 2,
        next: {
            value: 3,
            next: {
                value: 4,
                next: null,
            },
        },
    },
};

function* getReverseListValues1(list) {
    if (list.next) {
        yield* getReverseListValues1(list.next);
    }

    yield list.value;
}

function* getReverseListValues2(list) {
    const arr = [];
    let tmp = list;

    while (tmp) {
        arr.push(tmp.value);
        tmp = tmp.next;
    }

    for (let i = arr.length - 1; i >= 0; i--) {
        yield arr[i];
    }
}

console.log(...getReverseListValues1(linkedList));
console.log(...getReverseListValues2(linkedList));

Report Page