Les listes chaînées, une structure de données fondamentale en informatique, sont souvent utilisées pour représenter une séquence d'éléments. Dans certains scénarios, il est possible qu'une liste chaînée contienne une boucle, où le dernier nœud pointe vers un nœud précédent, créant ainsi une structure circulaire. Identifier la présence de telles boucles est une tâche cruciale pour diverses opérations impliquant des listes chaînées.
L'algorithme de recherche de cycle de Floyd, également connu sous le nom d'algorithme de tortue et de lièvre, fournit un moyen efficace de détecter les boucles dans les listes chaînées. L'algorithme fonctionne sur la base du principe du déplacement de deux pointeurs (références) à des vitesses différentes dans la liste :
Principe :
La fonction Java suivante implémente l'algorithme de recherche de cycle de Floyd :
<code class="java">boolean hasLoop(Node first) { if(first == null) // list does not exist..so no loop either return false; Node slow, fast; // create two references. slow = fast = first; // make both refer to the start of the list while(true) { slow = slow.next; // 1 hop if(fast.next != null) fast = fast.next.next; // 2 hops else return false; // next node null => no loop if(slow == null || fast == null) // if either hits null..no loop return false; if(slow == fast) // if the two ever meet...we must have a loop return true; } }</code>
L'algorithme de recherche de cycle de Floyd offre les avantages suivants :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!