Menu
CoddyTech

Reorder List

Otrzymujesz jednokierunkową listę połączoną przechowywaną w dwóch tablicach o tej samej długości. Węzeł i przechowuje wartość values[i] i wskazuje węzeł next[i], -1 oznacza koniec listy, a głową jest węzeł 0. Węzły nie są przechowywane w kolejności listy, więc podążaj za odsyłaczami.

Oznacz węzły w kolejności listy jako L0, L1, ..., Lk. Zmień kolejność listy tak, aby wyglądała następująco: L0, Lk, L1, Lk-1, L2, Lk-2, ...: najpierw pierwszy węzeł, potem ostatni, następnie drugi, potem przedostatni i tak dalej. Zwróć wartości w tej nowej kolejności.

Funkcja

reorderList(next: integer-array, values: integer-array) → 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 w każdym węźle
Zwracainteger-array
wartości w kolejności przestawionej listy

Ograniczenia

  • 1 ≤ n ≤ 4000, gdzie n jest długością next i values.
  • -1000 ≤ values[i] ≤ 1000
  • Każde next[i] ma wartość -1 lub jest indeksem węzła od 0 do n-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 = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Wyjście
[1, 5, 2, 4, 3]
Wyjaśnienie
Podążając za łączami z węzła 0, lista zawiera 1, 2, 3, 4, 5. Pierwszy, ostatni, drugi i przedostatni element dają 1, 5, 2, 4, a środkowa wartość 3 pojawia się na końcu.
challenge icon

Pytanie dodatkowe

Czy możesz zmienić kolejność samych linków, używając dodatkowo O(1) pamięci?

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

Test #1

Test #2

Test #3

Argumenty

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

Oczekiwany wynik

[1, 5, 2, 4, 3]