Menu
CoddyTech

Linked List Cycle

Une liste chaînée est stockée dans le tableau next : le nœud i pointe vers le nœud next[i], et -1 signifie que la liste se termine à cet endroit. La tête est le nœud 0. Suis les liens à partir de la tête et renvoie true si tu reviens à un nœud déjà visité, ou false si tu atteins la fin. Les nœuds que le parcours n’atteint jamais ne comptent pas, même s’ils pointent les uns vers les autres en boucle.

Fonction

hasCycle(next: integer-array) → boolean
nextinteger-array
le lien de chaque nœud : next[i] est le nœud après le nœud i, ou -1
Renvoieboolean
vrai si le parcours à partir du nœud 0 revisite un nœud, faux s’il atteint -1

Contraintes

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Plusieurs nœuds peuvent être reliés au même nœud, et certains nœuds peuvent être inaccessibles depuis la tête.

Exemples

Entrée
next = [1, 2, 3, 1]
Sortie
true
Explication
Le parcours passe par 0, 1, 2, 3, puis revient à 1. Le nœud 1 est visité deux fois, donc la liste comporte un cycle passant par les nœuds 1, 2 et 3.

lock icon+16 tests cachés à la soumission

challenge icon

Pour aller plus loin

Peux-tu aussi trouver le nœud où le cycle commence, toujours avec une mémoire supplémentaire de O(1) ?

Réinitialiser le code
def hasCycle(next):
    # Écrivez le code ici
Cas de test

Cas 1

Cas 2

Cas 3

Entrée

next = [1, 2, 3, 1]

Attendu

true