Ciclo en una lista enlazada
Hay \(n\) nodos numerados de \(0\) a \(n-1\), y cada nodo \(i\) apunta a un siguiente nodo \(s_i\), o a nadie (\(s_i = -1\)). La lista empieza en el nodo \(0\) (la cabeza) y se recorre siguiendo los punteros.
Di si, partiendo desde la cabeza, el recorrido entra en un ciclo (nunca llega a un \(-1\)). Los nodos que no se alcanzan desde la cabeza no importan.
Seguimiento: ¿puedes resolverlo usando memoria \(O(1)\)?
Entrada
La primera línea tiene \(n\) \((1 \le n \le 10^5)\) y la segunda los \(n\) valores \(s_i\) \((-1 \le s_i < n)\).
Salida
true si hay un ciclo alcanzable desde la cabeza o false si no.
Ejemplo 1
Entrada
4
1 2 3 1
Salida
true
Ejemplo 2
Entrada
2
1 -1
Salida
false
Ejemplo 3
Entrada
1
0
Salida
true
Basado en el problema 141 de LeetCode, Linked List Cycle, adaptado a entrada y salida estándar; enunciado redactado para este juez. Es parte de la lista Grind 75 de Yangshun Tay.
Comentarios