Voici le problème, il est d'excellents algorithmes de Sedgwick en Java (q 3,54)nombre de comptage de noeuds dans une liste, qui peut être circulaire
reçoit un lien vers un noeud dans une liste chaînée qui ne contient pas Les liens NULL (c'est-à-dire que chaque nœud est lié à lui-même ou à un autre nœud de la liste) déterminent le nombre de nœuds différents sans modifier l'un des nœuds et en n'utilisant pas plus qu'un espace mémoire constant.
Comment faites-vous? parcourir la liste une fois en utilisant l'algorithme lièvre et tortue pour déterminer si elle est circulaire d'une manière ou d'une autre, puis parcourir à nouveau pour voir où la liste devient circulaire, puis parcourir à nouveau en comptant le nombre de nœuds à cette position? ça sonne un peu brutalement, je suppose qu'il y a une solution beaucoup plus élégante.
Haha, j'étais en train d'élaborer une réponse élaborée basée sur mon idée que le nombre de pas qu'il faudrait pour qu'une tortue et un lièvre se rencontrent donne des informations sur la durée du cycle, alors que j'aurais dû le rechercher. – Joren
Moi aussi. :(Google est mon ami, Google est mon ami, Google est mon ami ... – TonyOssa
+1 Mais quelle est la complexité temporelle de votre algorithme? Trouver le cycle O (lambda + u), trouver la longueur de cycle O (lambda), trouver la longueur du cou O (lambda * u) Dans l'ensemble c'est toujours O (N^2) en supposant N = min (lambda, u) Y a-t-il un meilleur moyen que quadratique? – Akusete