salve a tutti, stavo facendo questo problema sulle liste:
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.
ho svolto la funzione in questo modo:
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;
}
il codice del professore invece è questo:
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;
}
}
}
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.