Ciclo en una lista enlazada

Tiempo límite 2 s
Memoria límite 256 MB
Casos de prueba 15
Dificultad Fácil Algoritmos
Mostrar (3) Dos punterosListas enlazadasTablas hash
Enviar solución

Puntos: 5

Tipos de problema
Lenguajes permitidos
C, C++, Java, Python, Rust

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

No hay comentarios por el momento.