Menu
CoddyTech

Reverse Nodes in k-Group

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

Разверни список группами по k узлов: первые k узлов должны идти в обратном порядке, затем следующие k и так далее. Последняя группа, если в ней меньше k узлов, сохраняет исходный порядок. Верни значения в новом порядке узлов списка.

Функция

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

Ограничения

  • 1 ≤ L ≤ 5000, где L — длина next и values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Каждый элемент next[i] равен -1 или является индексом узла от 0 до L-1.
  • Начиная с узла 0, список посещает каждый узел ровно один раз, а затем достигает -1. Цикла нет.

Примеры

Ввод
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Вывод
[2, 1, 4, 3, 5]
Пояснение
Список читается как 1, 2, 3, 4, 5 (узлы 0, 2, 4, 1, 3). Пары 1, 2 и 3, 4 расположены в обратном порядке, а 5 в одиночку короче, чем k = 2, поэтому он остается в конце.
challenge icon

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

Можешь написать это рекурсивно, переворачивая одну группу и рекурсивно обрабатывая оставшуюся часть списка? Сколько дополнительной памяти для этого потребуется?

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

Тест #1

Тест #2

Тест #3

Аргументы

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

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

[2, 1, 4, 3, 5]