Menu
CoddyTech

Reorder List

Du erhältst eine einfach verkettete Liste, die in zwei Arrays gleicher Länge gespeichert ist. Der Knoten i enthält den Wert values[i] und verweist auf den Knoten next[i], -1 beendet die Liste und der Kopf ist Knoten 0. Die Knoten sind nicht in der Reihenfolge der Liste gespeichert, folge also den Verweisen.

Nenne die Knoten in der Reihenfolge der Liste L0, L1, ..., Lk. Ordne die Liste so um, dass sie der Reihenfolge L0, Lk, L1, Lk-1, L2, Lk-2, ... folgt: zuerst der erste Knoten, dann der letzte, dann der zweite, dann der vorletzte und so weiter. Gib die Werte in dieser neuen Reihenfolge zurück.

Funktion

reorderList(next: integer-array, values: integer-array) → integer-array
nextinteger-array
der Index des Knotens, auf den jeder Knoten verweist, oder -1 für den letzten Knoten
valuesinteger-array
der von jedem Knoten gehaltene Wert
Gibt zurückinteger-array
die Werte in der Reihenfolge der neu sortierten Liste

Einschränkungen

  • 1 ≤ n ≤ 4000, wobei n die Länge von next und von values ist.
  • -1000 ≤ values[i] ≤ 1000
  • Jedes next[i] ist -1 oder ein Knotenindex von 0 bis n-1.
  • Ausgehend von Knoten 0 besucht die Liste jeden Knoten genau einmal und erreicht dann -1. Es gibt keinen Zyklus.

Beispiele

Eingabe
next = [3, 4, -1, 1, 2]values = [1, 3, 5, 2, 4]
Ausgabe
[1, 5, 2, 4, 3]
Erklärung
Wenn man den Verknüpfungen vom Knoten 0 folgt, lautet die Liste 1, 2, 3, 4, 5. Der erste, der letzte, der zweite und der vorletzte Wert ergeben 1, 5, 2, 4, und der mittlere Wert 3 kommt zuletzt.
challenge icon

Weiterführende Frage

Kannst du die Links selbst mit O(1) zusätzlichem Speicher neu anordnen?

Code zurücksetzen
def reorderList(next, values):
    # Schreibe hier den Code

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

[1, 5, 2, 4, 3]