Menu
CoddyTech

Middle of the Linked 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 ist mit dem Knoten next[i] verknüpft. -1 beendet die Liste, und der Kopf ist Knoten 0. Die Knoten sind nicht in der Reihenfolge der Liste gespeichert, folge also den Verknüpfungen.

Gib den Wert des mittleren Knotens zurück. Hat die Liste eine gerade Anzahl von Knoten, gibt es zwei mittlere Knoten; gib den Wert des zweiten zurück.

Funktion

middleNode(values: integer-array, next: integer-array) → integer
valuesinteger-array
der von jedem Knoten gespeicherte Wert
nextinteger-array
der Index des Knotens, auf den jeder Knoten verweist, oder -1 für den letzten Knoten
Gibt zurückinteger
der Wert des mittleren Knotens, des zweiten mittleren Knotens, wenn die Länge gerade ist

Einschränkungen

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

Beispiele

Eingabe
values = [4, 9, 2, 7, 5]next = [3, -1, 1, 4, 2]
Ausgabe
5
Erklärung
Wenn man den Verknüpfungen von Knoten 0 folgt, erhält man die Knoten 0, 3, 4, 2, 1; die Liste lautet also 4, 7, 5, 2, 9. Der dritte der fünf Knoten ist Knoten 4, dessen Wert 5 ist. Der mittlere Eintrag des Arrays selbst, values[2] = 2, ist ein anderer Knoten.

lock icon+13 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Kannst du den Knoten zurückgeben, der sich ein Drittel des Weges durch die Liste befindet, und zwar in einem einzigen Durchlauf? Wie schnell würde sich jeder Zeiger bewegen, und wo würdest du anhalten?

Code zurücksetzen
def middleNode(values, next):
    # Schreibe hier den Code
Testfälle

Fall 1

Fall 2

Fall 3

Eingabe

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

Erwartet

5