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

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

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

Слияние и перестройка связного списка

O(n + m)

Собери новый список, сшивая узлы из двух (или более) списков по порядку, используя фиктивный головной узел (dummy head), чтобы не обрабатывать первую вставку отдельным случаем, затем продвигай тот исходный список, у которого сейчас меньший узел.

Сигналы

слить два отсортированных связных спискаслить k отсортированных списковперестроить список (чередовать переднюю и заднюю половины)переставить узлы без копирования значений в массивфиктивный головной узел / sentinel

Шаблон

function mergeTwoLists(a, b) {
    const dummy = { next: null };
    let tail = dummy;
    while (a && b) {
        if (a.val <= b.val) { tail.next = a; a = a.next; }
        else { tail.next = b; b = b.next; }
        tail = tail.next;
    }
    tail.next = a || b;
    return dummy.next;
}

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

  • Быстрая сортировка сравнением (сортировка слиянием): Шаг слияния в сортировке слиянием сравнивает и объединяет два среза массива по индексам. Слияние списков переиспользует ту же идею «сравни наименьшее, продвинь одну сторону», но сшивает существующие узлы, перепрошивая .next через фиктивный головной узел; массива для деления или индексации здесь нет.

n + m узлов суммарно по спискам -> O(n + m): каждый узел посещается и сшивается ровно один раз.

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