Ciao , visto che nella funzione delete , non usi la funzione free() , mi pare che non si possa considerare corretta , ti metto un esempio di come implementerei io la funzione , POSSONO esserci errori
codice:struct entry *Delete (struct entry *list_head, int DaEliminare) { struct entry *list_record,*list_pointer; /* list_pointer e list_record , partono puntando entrambi alla testa della lista quando il ciclo for incrementa , troviamo che list_record punta al nodo sucessivo , e list_pointer al nodo che precede il ciclo termina quando list_record è NULL o quando ha trovato valore con un if , non dipendente dal for controllo se ha trovato valore */ for(list_pointer=list_head, list_record=list_head; list_record!=NULL && list_record->valore!=DaEliminare; list_pointer=list_record, list_record=list_record->next); if(list_record->valore==DaEliminare) { if(list_record!=list_head)//se il nodo da eliminare non è la testa { list_pointer->next=list_record->next //List pointer next ,puntava a record, adesso punta al nodo sucessivo free(list_record);//elimino il nodo in memoria return list_head; } else //il nodo da eliminare è il primo { list_pointer=list_record->next free(list_record);//elimino il nodo in memoria return list_pointer; } } return list_head; }


Rispondi quotando