Aquí está el problema, es a partir excelentes Algoritmos de Sedgwick en Java (q 3,54)número Count de nodos en una lista enlazada que puede ser circular
dado un enlace a un nodo en una lista enlazada que no contiene ningún los enlaces nulos (es decir, cada nodo ya sea enlaces a sí mismo u otro nodo en la lista) determinan el número de nodos diferentes sin modificar ninguno de los nodos y utilizando no más espacio de memoria constante.
¿Cómo lo haces? Examine la lista una vez usando el algoritmo de liebre y tortuga para determinar si es circular de alguna manera, y luego vuelva a explorar para determinar dónde la lista se vuelve circular, luego vuelva a explorar contando el número de nodos en esta posición. Suena un poco brutal para mí, creo que hay una solución mucho más elegante.
Jaja, estaba en el medio de idear una respuesta elaborada en base a mi idea de que el número de pasos que tomaría una tortuga y una liebre para cumplir me da información sobre la duración del ciclo, cuando debería haberlo buscado. – Joren
Yo también. :(Google es mi amigo, Google es mi amigo, Google es mi amigo ... – TonyOssa
+1. ¿Pero cuál es la complejidad de tiempo de su algoritmo? Buscar ciclo O (lambda + u), encontrar longitud de ciclo O (lambda), encuentra la longitud del cuello O (lambda * u). En general sigue siendo O (N^2) suponiendo N = min (lambda, u). ¿Hay una mejor manera que cuadrática? – Akusete