Liste

di il
5 risposte

Liste

Ciao a tutti!
Abbiamo appena introdotto le liste in questo modo:
 struct nodo{
    int info;
    struct nodo *next;
};
typedef struct nodo Nodo;
typedef Nodo * PNodo;

Mi sono imbattuto in qualche difficoltà scrivendo una funzione per cancellare dalla lista tutte le occorrenze di un certo dato.
Ho provato così:
PNodo Cancella(PNodo l, int val){
    PNodo tmp, prev, curr;
    tmp=(PNodo) malloc(sizeof(Nodo));
    prev=(PNodo) malloc(sizeof(Nodo));
    curr=(PNodo) malloc(sizeof(Nodo));
        
        while(l->info==val){
        tmp=l;
        l=l->next;
        free(tmp);}

            prev=NULL;
            curr=l;
            while(curr!=NULL){

            while(curr->info!= val && curr!=NULL){
                prev=curr;
                curr=curr->next;}
                if(curr!=NULL){
                    tmp=curr;
                    prev->next=curr->next;
                    free(tmp);
                    curr=prev->next;
                }
           }
return l;
        }
Sapreste aiutarmi?

5 Risposte

  • Re: Liste

    Esiste il tag CODE per il codice, messo per rendere leggibile e indentato il listato e permettere alle persone di aiutarti…
  • Re: Liste

    È probabile che ci siano accessi ad info senza prima controllare che il puntatore non sia nullo. Per esempio il primo while della prima funzione lo aggiusterei così:
    
    while(l !=NULL && l->info==val){
            tmp=l;
            l=l->next;
            free(tmp);}
    
  • Re: Liste

    Grazie ma non va, sto riprovando a riscrivere dall'inizio
  • Re: Liste

    
    if(l!=NULL){
    	prev=l;
    	curr=prev-next;
    	while(curr != NULL){
    		if(curr->info == val){
    			prev->next=curr->next;
    			free(curr);
    			curr=NULL;
    			if(prev->next != NULL) curr=prev->next;
    		}
    		else{
    			prev=curr;
    			curr=curr->next;
    		}
    }
    return l;
    
  • Re: Liste

    Grazie!!
Devi accedere o registrarti per scrivere nel forum
5 risposte