Menu
CoddyTech

Linked List Cycle

Eine verkettete Liste ist im Array next gespeichert: Der Knoten i verweist auf den Knoten next[i], und -1 bedeutet, dass die Liste dort endet. Der Kopf ist Knoten 0. Folge den Verweisen vom Kopf aus und gib true zurück, wenn du zu einem Knoten zurückkehrst, den du bereits besucht hast, oder false, wenn du das Ende erreichst. Knoten, die beim Durchlaufen nie erreicht werden, zählen nicht, selbst wenn sie in einer Schleife aufeinander verweisen.

Funktion

hasCycle(next: integer-array) → boolean
nextinteger-array
der Verweis jedes Knotens: next[i] ist der Knoten nach Knoten i oder -1
Gibt zurückboolean
true, wenn der Pfad von Knoten 0 aus einen Knoten erneut besucht, false, wenn er -1 erreicht

Einschränkungen

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Mehrere Knoten können mit demselben Knoten verknüpft sein, und einige Knoten sind möglicherweise vom Kopf aus nicht erreichbar.

Beispiele

Eingabe
next = [1, 2, 3, 1]
Ausgabe
true
Erklärung
Der Durchlauf geht über 0, 1, 2, 3 und dann zurück zu 1. Knoten 1 wird zweimal besucht, daher enthält die Liste einen Zyklus durch die Knoten 1, 2 und 3.

lock icon+16 versteckte Tests beim Einreichen

challenge icon

Weiterführende Frage

Kannst du auch den Knoten finden, an dem der Zyklus beginnt, weiterhin mit O(1) zusätzlichem Speicher?

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

Fall 1

Fall 2

Fall 3

Eingabe

next = [1, 2, 3, 1]

Erwartet

true