Cómo encontrar un nodo dentro de una lista enlazada que hace referencia a otro nodo
Frecuentes
Visto 61 equipos
-1
Si tenemos una lista enlazada con 10 nodos y el sexto nodo se refiere al segundo nodo. ¿Cómo podemos determinar que existe un bucle dentro
2 Respuestas
0
Hay algunos interesantes detección de ciclo algoritmos, el más famoso es el algoritmo "la tortuga y la liebre" (también conocido como detección del ciclo de Floyd). Se basa en la idea de que si la liebre camina el doble de rápido que la tortuga, si hay un ciclo, se volverán a encontrar.
El algoritmo de Brent es un poco más complicado, pero tiende a evaluar menos la función "siguiente" (aquí: sigue menos punteros).
Hay maneras de usar aún menos evaluaciones. Por lo que sé, todos ellos se basan en el uso de más almacenamiento. La forma más obvia es simplemente mantener una tabla hash de "nodos vistos hasta ahora" y detectar un ciclo cuando esté a punto de agregarle un nodo que ya está allí, detectando inmediatamente un nodo que ve por segunda vez pero tomando O(n) espacio. Detección de bucle de Gosper El algoritmo solo ocupa el espacio O (log n), y es mucho más interesante (quizás un poco difícil de entender). También hay un algoritmo ajustable (espacio frente a evaluaciones) basado en el uso varias pilas (El artículo contiene enlaces a aún más algoritmos).
Respondido el 12 de junio de 14 a las 14:06
0
Esta situación no puede ocurrir porque si tiene 10 nodos, el último nodo debe ser nulo en la lista vinculada. Como dice anteriormente, su quinto nodo debería ser nulo en esta situación y solo tendrá 5 elementos. Si está utilizando una lista enlazada circular, puede verificar
'(last->data== (first++)->data)'
Respondido 18 Jul 14, 15:07
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas data-structures linked-list or haz tu propia pregunta.
Si cicla después del sexto nodo, ¿cómo puedes tener 6 nodos? - harold
Si decide que la lista enlazada solo puede tener 6 nodos, esto es un duplicado de ¿Cómo detectar un bucle en una lista enlazada? - Bernhard Barker
Lea esto: Encontrar bucle en una lista enlazada individualmente - Sandeep Singh
Terrible implementación de la lista enlazada, supongo. - Saran-san