Выбор ответа 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 выполняется раньше, чем запоминается следующий узел.

Варианты ответа

  1. Теряется хвост: curr.next перезаписан до сохраненияправильный ответ
  2. Всё верно: функция корректно разворачивает список
  3. Возвращается curr вместо prev, то есть всегда null
  4. Нужно начинать с 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 ошибок.