PDA

View Full Version : [C] funzione cancella lista


blindwrite
27-06-2006, 13:54
sto cercando di implementare una funzione a cui passo una lista con testa elemento dummy e una stringa che indica i blocchetti della lista che devo cancellare

ho scritto questo, ma cancella solo il primo elemento della lista che trova con quel nome e lascia tutti gli altri elementi della lista con quel nome invariati
ecco:

void cancella2(proprieta *testa2,char nome[21])
{
proprieta*p;
p=testa2;
proprieta*prec,*corr,*tmp;
prec=p;
corr=p->next;
while(corr!=NULL && strcmp(corr->nome,nome)!=0 ){
prec=corr;
corr=corr->next;
}

if(corr!=NULL){
tmp=corr;
prec->next=corr->next;
free(tmp);
}

}

grazie a chi volesse aiutarmi

andbin
27-06-2006, 14:27
Salvo errori che posso aver commesso per il gran caldo :sbav: ;) , dovrebbe andare bene questo codice:
void cancella2 (proprieta **testa2,char nome[21])
{
proprieta *prop = *testa2;
proprieta *prev = NULL;
proprieta *next;

while (prop != NULL)
{
next = prop->next;

if (strcmp (prop->nome, nome) == 0)
{
if (prop == *testa2)
*testa2 = next;
else if (prec != NULL)
prec->next = next;

free (prop);
}
else
prec = prop;

prop = next;
}
}
Nota, e questo è importante, che alla funzione devi passare non il puntatore alla testa ma l'indirizzo del puntatore alla testa. Questo perché se cancelli il primo elemento (o i primi N elementi) della lista, il puntatore alla testa va aggiornato, altrimenti resterebbe inconsistente!!

blindwrite
27-06-2006, 14:37
grazie infinite
nel codice hai diachiarato prev e poi hai usato prec... ho corretto e funziona perfettamente!!

grazie grazie grazie

trallallero
27-06-2006, 14:48
'azz ... anticipato :)
lo stavo provando con la ricorsione
beati voi che state scoprendo liste e puntatori ... qui sempre la solita storia :rolleyes:

ma andbin ... lavori senza aria condizionata ???
o stai a casa ?

andbin
27-06-2006, 14:56
nel codice hai diachiarato prev e poi hai usato prec... è il caldo ... :p :p

andbin
27-06-2006, 14:58
ma andbin ... lavori senza aria condizionata ???Qui in ufficio non abbiamo il condizionatore ... al massimo mi porterò io un ventilatore. :(

trallallero
27-06-2006, 15:15
Qui in ufficio non abbiamo il condizionatore ... al massimo mi porterò io un ventilatore. :(
beh, qui l'hanno aggiustata da poco ma nonstante il fresco confesso che all'indirizzo al puntatore non ci avevo pensato :muro:
:)