Merge K Sorted Lists

Albert Davletov
UniLecs
Published in
2 min readMay 31, 2021

Задача: даны K связных списков, каждый из которых отсортирован. Необходимо написать алгоритм объединения заданных списков в единый отсортированный список.

Входные данные: lists — список списков

Вывод: result — результирующий список

Пример: 1->4->5, 1->3->4, 2->6

Output: 1->1->2->3->4->4->5->6

Разбор

Воспользуемся принципом разделяй и властвуй, в нашем случае, мы разделим задачу на 2 подзадачи:

  1. Напишем алгоритм для объединения 2х отсортированных связных списка.
  2. Далее пройдем по всем спискам и применим нашу подфункцию для 2х связных списка.

Как объединить 2 отсортированных связных списка?!

  1. Создаем два указателя для списков, а также создаем новый пустой список и указатель к нему.

2. Запускаем цикл покак оба указателя не равны null значению.

2.1. В цикле сравниваем значения узлов и присваиваем соот.значение новому списку, не забываем двигать указатели.

3. После окончания цикла, проверяем оба указателя: если какой то из них не равен null значению, значит в нем еще остались элементы, ктр присваиваем новому списку. Такая ситуация возникнет в том случае, если входные списки отличаются по длине.

Реализация

C#

https://gist.github.com/unilecs/4fb9fc61f6c452a7cf394cfe3e904de8

Play-test

https://dotnetfiddle.net/67tLnb

--

--