Para verificar que la lista vinculada es circular, ¿cuál será la condición del bucle? Conozco un proceso adicional como tomar dos punteros. Por favor sugiérame

Las siguientes son diferentes formas de hacer esto
Usar Hashing:
Recorre la lista uno por uno y sigue colocando las direcciones de nodo en una tabla hash. En cualquier momento, si se alcanza NULL, entonces devuelve falso y si el siguiente nodo actual apunta a cualquiera de los nodos almacenados previamente en Hash, entonces devuelve verdadero.

Marcar nodos visitados:
Esta solución requiere modificaciones a la estructura básica de datos de la lista vinculada. Tener una bandera visitada con cada nodo. Recorre la lista vinculada y sigue marcando los nodos visitados. Si vuelve a ver un nodo visitado, entonces hay un bucle. Esta solución funciona en O (n) pero requiere información adicional con cada nodo.
Una variación de esta solución que no requiere modificación a la estructura de datos básica se puede implementar utilizando hash. Simplemente almacene las direcciones de los nodos visitados en un hash y si ve una dirección que ya existe en el hash, entonces hay un bucle.

Algoritmo de búsqueda del ciclo de Floyd:
Este es el método más rápido. Recorrer la lista vinculada con dos punteros. Mueva un puntero por uno y otro puntero por dos. Si estos punteros se encuentran en algún nodo, entonces hay un bucle. Si los punteros no se encuentran, la lista vinculada no tiene bucle.

Este es el fragmento de código para el ciclo Floyd’s Cycle -Finding

while (slow_p && fast_p &&
fast_p-> siguiente)
{
slow_p = slow_p-> siguiente;
fast_p = fast_p-> next-> next;
si (slow_p == fast_p)
{
printf (“Loop encontrado”);
retorno 1;
}
}

Feliz codificación !!

Fuente: – Página en geeksforgeeks.org

Es fácil cuando tienes algo como C / C ++ que permite cosas geniales como punteros o cosas como Java, incluso cuando dos objetos pueden compararse con la suficiente precisión como para decirnos si son iguales. Todo lo que necesita hacer es marcar dónde comenzó, por ejemplo, ¿cómo sabe en un lugar desconocido si conduce en círculos? Eliges un hito y si alcanzas allí una vez más, sabes que has vuelto a donde empezaste.

En cuanto al código, podríamos hacer algo como esto en C:

#include

struct ListNodeT
{
datos nulos *;
struct ListNodeT * next;
}

bool isListCircular (struct ListNodeT * start)
{
struct ListNodeT * current = start-> next;
while (actual! = inicio) {
si (! actual)
// Fin de la lista alcanzado – lineal.
falso retorno;
actual = actual-> siguiente;
}

// Circular.
volver verdadero;
}

Agradable y detallada explicación con programa,

Cómo detectar el bucle en la lista vinculada, Cómo identificar el nodo de inicio del bucle en la lista vinculada y eliminar el bucle en la lista vinculada.

Detectar bucle, identificar el nodo de inicio del bucle y eliminar el bucle en la lista vinculada.

Esta condición de bucle podría ayudar:

transversal vacío (cabeza del nodo)
{
nodo temp = cabeza; // asumiendo que head es el primer nodo y no el ficticio
nodo temp2 = cabeza;
bandera int = 0;

while (flag == 0 && temp! = NULL)
{
temp = temp-> siguiente;
if (temp2 == temp)
bandera = 1;
}

si (bandera == 1)
cout << "circular";
más
cout << "lineal";
}