Menu
CoddyTech

Merge Two Sorted Lists

Тебе даны два односвязных списка, каждый хранится в двух массивах одинаковой длины. В первом списке узел i содержит значение values1[i] и указывает на узел next1[i]. Второй список устроен так же, с next2 и values2. В обоих списках -1 обозначает конец списка, а голова — это узел 0. Узлы хранятся не в порядке следования в списке, поэтому переходи по ссылкам.

Значения в каждом списке расположены вдоль ссылок в неубывающем порядке. Объедини списки в один отсортированный список и верни его значения по порядку.

Функция

mergeTwoLists(next1: integer-array, values1: integer-array, next2: integer-array, values2: integer-array) → integer-array
next1integer-array
индекс узла, на который ссылается каждый узел первого списка, или -1 для его последнего узла
values1integer-array
значение, хранящееся в каждом узле первого списка
next2integer-array
индекс узла, на который ссылается каждый узел второго списка, или -1 для его последнего узла
values2integer-array
значение, хранящееся в каждом узле второго списка
Возвращаетinteger-array
значения объединённого списка по порядку

Ограничения

  • 1 ≤ L1 ≤ 2000, где L1 — длина next1 и values1.
  • 1 ≤ L2 ≤ 2000, где L2 — длина next2 и values2.
  • -1000 ≤ values1[i], values2[j] ≤ 1000
  • Каждый элемент next1 — это -1 или индекс узла первого списка, а каждый элемент next2 — это -1 или индекс узла второго списка.
  • Начиная с узла 0, каждый список посещает каждый из своих узлов ровно один раз, а затем достигает -1. Цикла нет.
  • Вдоль своих связей каждый список отсортирован в порядке неубывания.

Примеры

Ввод
next1 = [2, -1, 1]values1 = [1, 6, 4]next2 = [3, 2, -1, 1]values2 = [2, 7, 9, 3]
Вывод
[1, 2, 3, 4, 6, 7, 9]
Пояснение
Следуя по ссылкам, первый список проходит узлы 0, 2, 1 и считывает значения 1, 4, 6; второй считывает значения 2, 3, 7, 9. Каждый раз выбирая меньшее из первых значений, получаем 1, 2, 3, 4, 6, 7, 9.
challenge icon

Дополнительный вопрос

Можешь ли ты объединить k отсортированных списков за время O(N log k), где N — общее количество узлов?

Сбросить код
def mergeTwoLists(next1, values1, next2, values2):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

next1 = [2, -1, 1]
values1 = [1, 6, 4]
next2 = [3, 2, -1, 1]
values2 = [2, 7, 9, 3]

Ожидаемый вывод

[1, 2, 3, 4, 6, 7, 9]