Questa è la funzione che mi da problemi:

codice:
//mi estrae la testa,e mi restituisce l'attuale testa della lista
 struct nodo_lista_adiacenti *estrai_testa(struct nodo_lista_adiacenti *testa)
 {
       struct nodo_lista_adiacenti *corrente; 

        corrente= testa;
       if(corrente != NULL)
       { 
              testa= testa->next;
               free(corrente);
        } return testa; 
}
//chiamata da quest'altra funzione:

codice:
struct nodo_lista_adiacenti *bfs(struct vertice *grafo, int i, int dim)
 { 
        int confronto; //inizializzo la coda vuota
        struct nodo_lista_adiacenti *lista=NULL,
        *testa, *adiacenti=NULL,   *da_restituire=NULL;

        //coloro tutti i vertici di bianco 
        vertici_bianchi(grafo, dim);
        // i è l'indice del vertice da cui parte l'esplorazione
        strcpy(grafo[i].colore, "grigio"); 
        grafo[i].distanza_precedente= 0;
        grafo[i].predecessore= 0; 
       //inserisco in coda alla lista i che è un indice
        lista= inserisci_valore_in_coda(i, lista);
        
         while(lista != NULL) 
         { 
                 testa= visualizza_testa(lista);
                  lista=estrai_testa(lista); 
                  adiacenti= cerca_adiacenti(testa->info, grafo);
                 
                   while(adiacenti != NULL) 
                   { 
                          if( (confronto= (strcmp(grafo[adiacenti->info].colore, "bianco"))) == 0)      
                           { 
                                 strcpy(grafo[adiacenti->info].colore, "grigio");
                                 grafo[adiacenti->info].distanza_precedente= grafo[testa-  
>info].distanza_precedente +1; grafo[adiacenti->info].predecessore= testa->info;
                                lista= inserisci_valore_in_coda(adiacenti->info, lista); 
                                da_restituire= inserisci_valore_in_coda(adiacenti->info, da_restituire);
                            } 
                            adiacenti= adiacenti->next; 
                    }
                    strcpy(grafo[testa->info].colore, "nero"); 
           } 
           return da_restituire;
 }