Cancellare nodo lista a puntatori

di il
1 risposte

Cancellare nodo lista a puntatori

Salve ragazzi ho fatto una gestione di una lista a puntatori funziona tutto alla perferzione solo che non riesco ad implementare in maniera corretta la funzione cancella vi posto il sorgente sicuro è piena di errori logici


void cancella(){

    struct nodo *inizio;
    inizio=&lista;
    if(inizio->next==NULL)
    {
        free(inizio);
        inizio=NULL;
        controllo=0;  //variabile statica che mi dice se posso prevevare 1 posso 0 altrimenti
    }
            else
            {
                while(inizio->next!=NULL){
                    inizio=inizio->next;
                
                }
                free(inizio->next);
                inizio->next=NULL;
            }
}

1 Risposte

  • Re: Cancellare nodo lista a puntatori

    Prima di tutto devi passare alla funzione la lista da deallocare. Puoi inoltre fare restituire alla liista un puntatore a nodo in modo da poter avere nel main un modo per accertarti che la lista sia stata deallocata completamente.
    
    typedef struct nodo_lista{
        int inf;
        struct nodo_lista *next;
    }nodo;
    
    nodo *cancella(nodo *tua_lista){
        nodo *inizio;
        if(tua_lista == NULL) return tua_lista;   //se lista è già = a NULL non c'è nulla da deallocare 
        while(tua_lista != NULL){      
               inizio = tua_lista;                  //inizio punta alla testa della lista
               tua_lista = tua_lista->next;    /*mando avanti la testa così il nodo puntato da inizio non    farà piu parte della lista*/
               free(inizio);                          //dealloco la ex-testa
         }
         return tua_lista;
    }
    
    Se tutto è andato a buon fine nel main tua lista deve valere NULL.
    In questo modo dovrebbe andare. Prova e fammi sapere. Ciao!!
Devi accedere o registrarti per scrivere nel forum
1 risposte