Originariamente inviato da swurzy
Salve a tutti[...]

Ho messo i cout<<n e cout<<# per tentare di capire cosa facesse! Dati 3 elementi l'output è questo: #1#3#5, e mi restituisce sempre la lista vuota! P.S: l è il nodo della classe lista. Dove sbaglio??
codice:
void lista::eliminapari(){
    nodo *p;
    int n=0;
       if (l==0)
           cout<<"La lista è vuota";
    else          //a che serve sto else?? se l ==0 lui comunque non entra nel while
    
     while(l!=0){   
        if (n%2==0){
        p=l;
        l=l->succ;     //l è il successivo rispetto all'ultimo ingresso in questo scope
        delete p;
        cout<<"#";
        n++;
        cout<<n;
        }
        else
        n++;}
                  
}
tu ogni volta che rientri nello scope nel quale n è pari chiami l=l->succ cioè incrementi l di uno, quindi non cancelli i dispari, li cancelli in modo consecutivo: infatti il tuo output di n è:
Dati 3 elementi l'output è questo: #1#3#5
n "supera" il numero di elementi, ma fa capire che quello scope viene chiamato n_elementi volte e l'errore è proprio qui