View Single Post
Old 15-12-2009, 19:30   #13
wingman87
Senior Member
 
Iscritto dal: Nov 2005
Messaggi: 2774
Quote:
Originariamente inviato da The-Revenge Guarda i messaggi
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.
wingman87 è offline   Rispondi citando il messaggio o parte di esso