Quote Originariamente inviata da andbin Visualizza il messaggio
Ma non devi "toccare" top! Altrimenti è ovvio che alteri la lista!

codice:
Nodo nodoCorrente = top;

while (nodoCorrente != null) {
    // usa 'user' di nodoCorrente
    nodoCorrente = nodoCorrente.utentePresentato;
}
Il while che ho scritto, scorre tutta la lista, senza alterarla. E qualunque cosa vuoi fare con 'user' la devi fare dentro il while.
Se vuoi invece fare un metodo che estrae il "prossimo" elemento, devi mantenere lo "stato" del nodo corrente da qualche parte. Preferibilmente non in SocialPlatform ma in un oggetto apposito che incapsula la logica di iterazione, oggetto che prende il nome di "iteratore" (la interfaccia java.util.Iterator serve proprio a questo).
Allora ho fatto come hai detto tu (non posso usare l'interfaccia Iterator...a tal proposito un chiarimento: ho capito male o è possibile usarla solo in classi astratte?):

codice:
    public void stampaUtenti() {
        Nodo nodoCorrente = top;
        while (nodoCorrente != null) {
            nodoCorrente = nodoCorrente.utentePresentato;
            System.out.println(nodoCorrente);
        }
    }
Ma mi stampa questa roba:
socialplatform.SocialPlatform$Nodo@48dbb335
socialplatform.SocialPlatform$Nodo@4fd281f1
socialplatform.SocialPlatform$Nodo@5511e28
null

(ho definito appunto 4 utenti)

Eppure in Utente il toString di object l'ho ridefinito. Non ci capisco più niente