Untitled
unknown
c_cpp
a month ago
1.1 kB
1
Indexable
Never
nodo_t* eliminaNodo(nodo_t *head, nodo_t* NodoDaEliminare) { //Se la lista è vuota o il nodo da eliminare è NULL, ritorna la testa invariata if(head == NULL || NodoDaEliminare == NULL) { return head; } //Caso 1: Il nodo da eliminare è la testa if(head == NodoDaEliminare) { nodo_t* nuovaTesta = head -> next; //Aggiorna la testa al nodo successivo free(head); //dealloca il nodo vecchio return nuovaTesta; // Restituisce la nuova testa } //Caso 2: Il nodo da eliminare è in mezzo oppure è la coda nodo_t* corrente = head; //Trova il nodo precedente al nodo da eliminare while(corrente->next != NULL && corrente -> next != NodoDaEliminare) { corrente = corrente -> next; } //Se il nodo da eliminare è trovato (cioè corrente-next è NodoDaEliminare) if(corrente -> next == NodoDaEliminare){ corrente -> next = NodoDaEliminare->next;//Bypass il nodo da eliminare free(NodoDaEliminare); } return head; }
Leave a Comment