Ma non mi basterebbe scandire una sola volta la lista in ogni caso?Ti aiuta perchè cosi ti basta scandire una sola volta la lista per trovare l'elemento più frequente.
Io la farei cosi: crei due strutture con dentro un contatore impostato inizialmente a 0 per entrambi e con una variabile per la chiave corrispondente.
Nel tuo ciclo, userai solo una delle due strutture. All'inizio modificherai la prima struttura mettendo la chiave e il contatore = 1, passi avanti e finchè è uguale incrementi il contatore. Appena la chiave è diversa, fai il confronto con l'altra struttura: se il contatore è maggiore lo sostituisci, sennò rimane invariata. E ricominci il procedimento con il nodo successivo ( la vecchia struttura verrà di nuovo impostata a 1 ed incrementata, per poi essere confrontata con quella che contiene la chiave con più frequenza).
Alla fine del ciclo avrai la struttura con la chiave con più elementi nella lista.
Se riordinassi con merge o quick spenderei del tempo con la loro esecuzione e solo O(n) quando devo fare i conti, ma se non riordino non so se il tempo sia di un ordine di grandezza molto superiore.
Anyway, vediamo se ho capito:
-procedo con merge dei numeri casuali
-ottengo una lista ordinata che duplico (?)
-imposto i contatori a 0
-modifico la prima struttura ponendo la chiave e il counter a 1, incrementandola
-la confronto con la chiave con più elementi nella lista (ma da dove la prendo?)
-se la chiave confrontata è diversa, confronto l'altra struttura
-se il counter è maggiore la sostituisco
-proseguo con il nodo successivo, la vecchia struttura viene reimpostata a 1 e incrementata per essere riconfrontata con quella che contiene la chiave con più elementi
Fatico a capire cosa dovrei fare con gli step, figuriamoci in codice... :suicidio: