Qui è il problema, è da eccellenti algoritmi di Sedgwick in Java (q 3,54)numero conte di nodi in una lista collegata che può essere circolare
Dato un link a un nodo in una lista concatenata semplice che non contiene i collegamenti nulli (ovvero ogni nodo si collega a se stesso o ad un altro nodo nell'elenco) determinano il numero di nodi diversi senza modificare nessuno dei nodi e non utilizzano più di uno spazio di memoria costante.
Come si fa? scansiona l'elenco una volta usando l'algoritmo di lepre e tartaruga per capire se è circolare in qualche modo, quindi eseguire nuovamente la scansione per capire dove l'elenco diventa circolare, quindi eseguire nuovamente la scansione contando il numero di nodi in questa posizione? mi sembra un po 'bruta, immagino ci sia una soluzione molto più elegante.
Haha, ero nel bel mezzo di elaborare una risposta elaborata basata sulla mia intuizione che il numero di passi necessari per una tartaruga e una lepre per incontrarsi fornisce informazioni sulla durata del ciclo, quando avrei dovuto semplicemente cercarlo. – Joren
Anch'io. :(Google è mio amico, Google è mio amico, Google è mio amico ... – TonyOssa
+1. Ma qual è la complessità temporale del tuo algoritmo? Trova il ciclo O (lambda + u), trova la lunghezza del ciclo O (lambda), trova la lunghezza del collo O (lambda * u) .In generale è ancora O (N^2) assumendo N = min (lambda, u). C'è un modo migliore del quadratico? – Akusete