Quote:
Originariamente inviato da The-Revenge
Codice:
struct lis *cancNum(struct lis *p){
struct lis *paus,*paus2;
while(((p->inf)%2==0)&&(p!=NULL)){paus=p;
p=p->pun;
p->pun=NULL;
free(paus);
}
paus=p;
while(paus!=NULL){
paus2=paus->pun;
if(((paus2->inf)%2==0)){
paus->pun=paus2->pun;
paus2->pun=NULL;
free(paus2);
}
paus=paus->pun;
}
return(p);
|
E' quasi tutto giusto, nella condizione del primo while bisogna scambiare le due condizioni, in modo che se p è NULL non viene fatto il controllo p->inf%2==0 che darebbe errore.
La prima assegnazione a NULL è un errore, perché nella istruzione precedente hai assegnato a p il nodo successivo, quindi stai agendo su un nodo che non hai ancora esaminato.
La seconda assegnazione a NULL è inutile perché tanto agisce su memoria che subito dopo deallochi con free.