Выбор ответа Junior Связные списки спрашивают часто обновлено
Разворот списка: ошибка
Вопрос
Функция должна развернуть список. Что с ней не так?
function reverse(head) {
let prev = null, curr = head;
while (curr) {
curr.next = prev;
prev = curr;
curr = curr.next;
}
return prev;
}
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Теряется хвост: curr.next перезаписан до сохранения. Строка curr.next = prev выполняется раньше, чем запоминается следующий узел.
Варианты ответа
- Теряется хвост:
curr.nextперезаписан до сохраненияправильный ответ - Всё верно: функция корректно разворачивает список
- Возвращается
currвместоprev, то есть всегдаnull - Нужно начинать с
prev = head, а не сnull
Разбор
Строка curr.next = prev выполняется раньше, чем запоминается следующий узел. Затем curr = curr.next читает уже перезаписанную ссылку (в первой итерации это null): функция вернёт одну голову, остальной список потерян. Правильно: const next = curr.next; curr.next = prev; prev = curr; curr = next;.
- Функция некорректна, как показано.
prevвозвращается правильно: в конце это новая голова.prev = headсоздаст цикл в первом узле.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.