Menu
CoddyTech

Reverse Nodes in k-Group

Jednokierunkowa lista wiązana jest przechowywana w dwóch tablicach o tej samej długości. Węzeł i przechowuje values[i] i wskazuje na węzeł next[i]; -1 oznacza koniec listy, a głową jest węzeł 0. Węzły mogą być przechowywane w dowolnej kolejności, dlatego podążaj za wskaźnikami, a nie za kolejnością w tablicy.

Odwróć listę w grupach po k węzłów: pierwsze k węzłów mają zostać odwrócone, potem następne k i tak dalej. Ostatnia grupa licząca mniej niż k węzłów zachowuje swoją kolejność. Zwróć wartości w nowej kolejności listy.

Funkcja

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
indeks węzła, do którego prowadzi każdy węzeł, lub -1 dla ostatniego węzła
valuesinteger-array
wartość przechowywana przez każdy węzeł
kinteger
liczba węzłów w każdej grupie do odwrócenia
Zwracainteger-array
wartości w nowej kolejności listy

Ograniczenia

  • 1 ≤ L ≤ 5000, gdzie L jest długością next i values.
  • -1000 ≤ values[i] ≤ 1000
  • 1 ≤ k ≤ L
  • Każde next[i] to -1 lub indeks węzła od 0 do L-1.
  • Rozpoczynając od węzła 0, lista odwiedza każdy węzeł dokładnie raz, a następnie dociera do -1. Nie ma cyklu.

Przykłady

Wejście
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Wyjście
[2, 1, 4, 3, 5]
Wyjaśnienie
Lista odczytuje 1, 2, 3, 4, 5 (węzły 0, 2, 4, 1, 3). Pary 1, 2 i 3, 4 są odwrócone, a samo 5 jest krótsze niż k = 2, więc pozostaje na końcu.
challenge icon

Pytanie dodatkowe

Czy potrafisz zapisać to rekurencyjnie, odwracając jedną grupę i wywołując rekurencję dla reszty listy? Ile dodatkowej pamięci to wymaga?

Zresetuj kod
def reverseKGroup(next, values, k):
    # Napisz kod tutaj

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

[2, 1, 4, 3, 5]