Получение списка в обратном порядке

Проходите исходный список и добавляйте копию каждого узла в начало нового. Это развернёт порядок, не меняя next у исходных узлов.

Короткий ответ

Что ответить на собеседовании

Проходите исходный список и добавляйте копию каждого узла в начало нового. Это развернёт порядок, не меняя next у исходных узлов.

Подробный разбор

Ответ с пояснениями

Условие

Дан односвязный список, каждый узел которого хранит некоторое целое значение и ссылку на следующий элемент. Требуется написать функцию, которая формирует и возвращает новый список, где элементы расположены в обратном порядке относительно исходного.

class Node {
    Node next;
    int value;
}

public Node reverse(Node root) {
    return null;
}

Ответ

Проходите исходный список и добавляйте копию каждого узла в начало нового. Это развернёт порядок, не меняя next у исходных узлов.

public Node reverse(Node root) {
    Node reversed = null;
    for (Node current = root; current != null; current = current.next) {
        Node copy = new Node();
        copy.value = current.value;
        copy.next = reversed;
        reversed = copy;
    }
    return reversed;
}

Для null результат null. Время O(n), память O(n) на новые узлы; дополнительный стек не нужен. Предполагается ацикличный список. Разворот ссылок на месте дал бы O(1) дополнительной памяти, но нарушил бы требование сформировать новый список.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее