Menu
CoddyTech

Reverse Nodes in k-Group

Eine einfach verkettete Liste wird in zwei Arrays gleicher Länge gespeichert. Knoten i enthält values[i] und ist mit Knoten next[i] verknüpft; -1 beendet die Liste, und der Kopf ist Knoten 0. Die Knoten können in beliebiger Reihenfolge gespeichert sein. Folge daher den Verknüpfungen und nicht der Reihenfolge im Array.

Kehre die Liste in Gruppen von k Knoten um: Die ersten k Knoten werden umgekehrt, dann die nächsten k und so weiter. Eine letzte Gruppe mit weniger als k Knoten behält ihre Reihenfolge bei. Gib die Werte in der Reihenfolge der neuen Liste zurück.

Funktion

reverseKGroup(next: integer-array, values: integer-array, k: integer) → integer-array
nextinteger-array
den Index des Knotens, auf den jeder Knoten verweist, oder -1 für den letzten Knoten
valuesinteger-array
der von jedem Knoten gehaltene Wert
kinteger
die Anzahl der Knoten in jeder Gruppe, die umgekehrt werden soll
Gibt zurückinteger-array
die Werte in der Reihenfolge der neuen Liste

Einschränkungen

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

Beispiele

Eingabe
next = [2, 3, 4, -1, 1]values = [1, 4, 2, 5, 3]k = 2
Ausgabe
[2, 1, 4, 3, 5]
Erklärung
Die Liste lautet 1, 2, 3, 4, 5 (Knoten 0, 2, 4, 1, 3). Die Paare 1, 2 und 3, 4 sind umgekehrt, und nur 5 ist kürzer als k = 2, daher bleibt es am Ende.
challenge icon

Weiterführende Frage

Können Sie es rekursiv schreiben, indem Sie eine Gruppe umkehren und für den Rest der Liste rekursiv vorgehen? Wie viel zusätzlichen Speicher benötigt das?

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

Test #1

Test #2

Test #3

Argumente

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

Erwartete Ausgabe

[2, 1, 4, 3, 5]