salve a tutti, stavo facendo questo problema sulle liste:ho svolto la funzione in questo modo:Sia data la struttura seguente, con il campo info puntatore ad una stringa allocata nella memoria dinamica:struct elem {char* info; elem* pun;};
Scrivere una funzione che data una lista L di elementi di tipo elem ed una stringa st, elimina dalla lista L tutti gli
elementi il cui campo informazione è maggiore o uguale a st. La lista e la stringa devono essere passate come argomento alla
funzione.
il codice del professore invece è questo:codice:void elimina (elem*testa, char * st) { if (testa==NULL) return; elem *p=testa; elem *q=NULL; for (p; p!=NULL; p=p->pun){ q=p; //un elemento indietro if (strcmp (p->info, st)<=0) { q->pun=p->pun; delete p->info; delete p; } } return; }
come vedete il mio codice è più corto, di conseguenza sarà sbagliato sicuramente in qualche suo punto. il problema è che non riesco a capire perchè il mio codice non funziona.codice:void elimina(elem*& p, char* s) { if (p== NULL) return; elem*q, *r; // elimino elementi in testa while ((p != NULL) && (strcmp(p->info, s) <=0)) { q=p; p=p->pun; delete[] q->info; delete q; } if (p == NULL) return; r = p; q = p->pun; //elimino non in testa while(q!=NULL) { if (strcmp(q->info, s) <=0) { r->pun = q->pun; delete[] q->info; delete q; q = r->pun; } else { r = q; q = q->pun; } } }

Rispondi quotando
