Бесплатная бета: 30 дней полного доступа, без карты.Зарегистрироваться бесплатно

Мы используем необходимые куки для работы сайта (вход и язык). Формы обратной связи и сообщения об ошибке дополнительно используют Google reCAPTCHA для защиты от спама. Она загружается только если вы согласитесь. Политика конфиденциальности

Полевой справочник

Разворот связного списка

O(n)

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

Сигналы

развернуть связный список (весь список или между позициями)развернуть группами по kбез дополнительного массива или с O(1) доп. памятипоменять местами пары узловодносвязный список, доступен только .next

Шаблон

function reverseList(head) {
    let prev = null;
    let curr = head;
    while (curr) {
        const next = curr.next;
        curr.next = prev;
        prev = curr;
        curr = next;
    }
    return prev;
}

Похоже, но не то

  • Два указателя (в одну сторону): Указатели в одну сторону идут по индексам массива: один быстро читает, другой медленно пишет. У разворота нет ни массива, ни индексов; он перепрошивает поле .next у каждого узла на месте, это хирургия указателей, а не обход по индексам.

n до 1e5 узлов -> O(n): один проход, у каждого узла указатель меняется один раз, O(1) доп. памяти.

Изучить этот паттерн