Ok ok grazie. cmq sto provando anche in altri modi e avendo a disposizione la funzione cancella:
bool lista::cancella(int x)
{
nodo *lc, *lp;
lc=l; // nodo inizializzato al puntatore di testa
lp=0; // nodo precedente a quello da eliminare
while( (lc!=0) && (lc->valore < x) )
{
lp=lc;
lc=lc->succ;
}
if ( (lc!=0) && (lc->valore == x) )
{
if (lp==0)
l=lc->succ; // cancellazione in testa
else
lp->succ = lc->succ; // cancellazione non in testa
delete lc;
return true;
}
else
return false; // lista vuota o elemento non trovato (lc=0)
}
credo che riutilizzando questa funzione la cosa sarebbe molto più semplice. Riporto qui una bozza di codice che è sbagliato perchè non so come richiamare la funzione...
void lista::elimina_comuni(lista &l2)
{
bool trov=false;
nodo* aux;
nodo* p = l;
nodo* q = l2.l;
while (p != 0) {
while ((q != 0) && (trov==false)) {
if (p->valore==q->valore)
trov = ????? cancella(p->valore);
else
q=q->succ;
}
p=p->succ;
}
}
una soluzione potrebbe essere quella di riportare la lista 1 nei parametri della funzione in modo da poter scrivere:
trov=l1.cancella(p->valore);
oppure???