Menu
CoddyTech

Linked List Cycle

Una lista concatenata è memorizzata nell'array next: il nodo i punta al nodo next[i] e -1 indica la fine della lista. La testa è il nodo 0. Segui i collegamenti a partire dalla testa e restituisci true se torni a un nodo che hai già visitato, oppure false se raggiungi la fine. I nodi che il percorso non raggiunge non contano, anche se puntano l'uno all'altro formando un ciclo.

Funzione

hasCycle(next: integer-array) → boolean
nextinteger-array
il collegamento di ogni nodo: next[i] è il nodo successivo al nodo i, oppure -1
Restituisceboolean
vero se il percorso dal nodo 0 visita di nuovo un nodo, falso se raggiunge -1

Vincoli

  • 1 ≤ next.length ≤ 104
  • -1 ≤ next[i] ≤ next.length-1
  • Diversi nodi possono collegarsi allo stesso nodo e alcuni nodi potrebbero non essere raggiungibili dalla testa.

Esempi

Input
next = [1, 2, 3, 1]
Output
true
Spiegazione
Il percorso procede 0, 1, 2, 3 e poi torna a 1. Il nodo 1 viene visitato due volte, quindi la lista ha un ciclo che passa per i nodi 1, 2 e 3.

lock icon+16 test nascosti all’invio

challenge icon

Per approfondire

Riesci anche a trovare il nodo in cui inizia il ciclo, sempre con memoria extra O(1)?

Ripristina il codice
def hasCycle(next):
    # Scrivi il codice qui
Casi di test

Caso 1

Caso 2

Caso 3

Input

next = [1, 2, 3, 1]

Atteso

true