Menu
CoddyTech

Linked List Cycle

Una lista enlazada se almacena en el array next: el nodo i enlaza con el nodo next[i], y -1 significa que la lista termina ahí. La cabeza es el nodo 0. Sigue los enlaces desde la cabeza y devuelve true si vuelves a un nodo que ya habías visitado, o false si llegas al final. Los nodos a los que el recorrido nunca llega no cuentan, aunque se enlacen entre sí formando un ciclo.

Función

hasCycle(next: integer-array) → boolean
nextinteger-array
el enlace de cada nodo: next[i] es el nodo que está después del nodo i, o -1
Devuelveboolean
verdadero si el recorrido desde el nodo 0 vuelve a visitar un nodo, falso si llega a -1

Restricciones

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Varios nodos pueden enlazarse al mismo nodo, y algunos nodos pueden ser inaccesibles desde la cabeza.

Ejemplos

Entrada
next = [1, 2, 3, 1]
Salida
true
Explicación
El recorrido va por 0, 1, 2, 3 y después vuelve a 1. El nodo 1 se visita dos veces, así que la lista tiene un ciclo que pasa por los nodos 1, 2 y 3.

lock icon+16 pruebas ocultas al enviar

challenge icon

Para ir más allá

¿También puedes encontrar el nodo donde comienza el ciclo, usando aún memoria extra O(1)?

Restablecer código
def hasCycle(next):
    # Escribe el código aquí
Casos de prueba

Caso 1

Caso 2

Caso 3

Entrada

next = [1, 2, 3, 1]

Esperado

true