Что произойдет при простом обмене ссылок при инвертировании связного списка
Что проверяют
Понимаете ли вы, что ссылка это поле узла, а не связь между узлами, и что перезапись next без сохранения следующего элемента отрезает хвост списка. Стандартный вопрос живого кодирования.
Как отвечать
Разворот делается одним проходом с тремя указателями:
Node prev = null, cur = head;
while (cur != null) {
Node next = cur.next; // сначала запоминаем
cur.next = prev; // потом рвём связь
prev = cur;
cur = next;
}
head = prev;Если обменять ссылки «просто», без сохранения next, доступ к остатку списка теряется сразу: после cur.next = prev идти вперёд уже некуда. Дальнейшее зависит от кода. Переход cur = cur.next уведёт обратно на предыдущий узел, и два узла начнут указывать друг на друга: получится бесконечный цикл, а на попытке напечатать список программа зависнет. Если же поменять только head, не трогая поля узлов, структура останется прежней, а список снаружи станет одноэлементным.
Проговорить стоит и границы: пустой список и один элемент должны отрабатывать без ветвлений, head обязательно обновляется в конце, сложность O(n) по времени и O(1) по памяти. Рекурсивный вариант тоже линейный, но глубина стека равна длине списка, поэтому на большом входе он даёт StackOverflowError. В двусвязном списке на каждом шаге меняются оба поля, а голова с хвостом меняются ролями.
Где спотыкаются
Называют потерю узлов утечкой памяти. В Java недостижимые узлы соберёт сборщик мусора, утечка это обратная ситуация, когда ссылка на ненужное осталась. Ошибка здесь в потере данных, и подмена термина показывает, что про модель памяти кандидат говорит наизусть.
Забывают присвоить head. Цикл отработал верно, поля развёрнуты, а снаружи список выглядит обрезанным до одного элемента. Ловится это проверкой длины после разворота, поэтому тест стоит написать до кода.
Разворачивают значения вместо ссылок. На списке чисел это даже пройдёт, но задача была про перестройку структуры: узлы с одинаковыми значениями, тяжёлая полезная нагрузка или список из стандартной библиотеки, где до полей узла не добраться, сразу показывают разницу.