Salve a tutti, ringrazio prima di tutto oregon, che mi ha risposto poco tempo fa in 2 topic.

Nel seguente problema, vorrei che la seguente chiamata a funzione, mi cancellasse il valore x nella lista, e mi ritornasse un valore buleano 1=se cancellato , 0=se non cancellato.
Metto le parti del programma che servono alla funzione (quello che ometto riguarda altre funzioni).

main.cpp
codice:
int x;lista l1;
cin<<x;
l1.cancella(x);
contatore.h
codice:
struct nodo
{
   int valore;
   nodo *succ;
};

class lista
{
  nodo *l;
  bool eliminaval(nodo* l,int x);

public:
  lista(){l=0;}   //Costruttore
  ~lista();       //Distruttore
  bool cancella(int);
};


contatore.cpp
codice:
bool lista::cancella(int x)
{
    return eliminaval(l,x);
};


bool lista::eliminaval(nodo* l,int x){

bool cancellato;
nodo* s;
s=l;
while(l->succ!=NULL){                 //controlla elementi da dopo il primo
if(l->succ->valore==x){
l->succ=l->succ->succ;

cancellato=1;
}}; //fine if e fine while

if(s->valore==x){              //controlla se il primo valore è x, se si parte dal succesivo
s=s->succ;
cancellato=1;
}; //fine if

return cancellato;
};// fine funzione eliminaval

Non riesco a capire se è sbagliata la funzione, o in qualche modo l non è raggiungibile .
Mi stampa sempre gli stessi elementi che ho messo in l, e non mi elimina niente.
Naturalmente la stampa la faccio con un'altra funzione l1.stampa(); , ma funziona bene, e i dati vengono stampati, funziona anche se inserisco un elemento con l1.push(x); .
In pratica solo questo pezzo non va.


Ho fatto chiamate simili per altre funzioni, e funzionano bene, però in questo caso l non me lo modifica.