Menu
CoddyTech

Sort List

Дан односвязный список, хранящийся в двух массивах одинаковой длины. Узел i содержит значение values[i] и ссылку на узел next[i], -1 обозначает конец списка, а головой является узел 0. Узлы хранятся не в порядке списка, и в массивах также могут быть лишние узлы, до которых не доходит обход от узла 0. Они не являются частью списка, даже если их ссылки указывают на его узлы.

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

Функция

sortList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
индекс узла, на который ссылается каждый узел, или -1 для последнего узла
valuesinteger-array
значение, хранящееся в каждом узле
Возвращаетinteger-array
значения узлов списка, начиная с наименьшего

Ограничения

  • 1 ≤ n ≤ 4000, где n — длина next и values.
  • -1000 ≤ values[i] ≤ 1000
  • Каждый next[i] — это -1 или индекс узла от 0 до n-1.
  • Начиная с узла 0, список достигает -1, не посещая один и тот же узел дважды.
  • Узлы, до которых не доходит обход, начинающийся с узла 0, не являются частью списка. Их записи next могут указывать куда угодно.

Примеры

Ввод
next = [3, -1, 4, 2, 1]values = [4, 1, 3, 2, 5]
Вывод
[1, 2, 3, 4, 5]
Пояснение
Обход от узла 0 посещает узлы 0, 3, 2, 4, 1, поэтому список выглядит так: 4, 2, 3, 5, 1. В отсортированном виде это 1, 2, 3, 4, 5.
challenge icon

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

Сможешь ли ты отсортировать, переподключив узлы, за время O(n log n), не копируя значения?

Сбросить код
def sortList(next, values):
    # Напишите код здесь

Тест #1

Тест #2

Тест #3

Аргументы

next = [3, -1, 4, 2, 1]
values = [4, 1, 3, 2, 5]

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

[1, 2, 3, 4, 5]