Untitled
unknown
c_cpp
a year ago
1.1 kB
12
Indexable
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;
}Editor is loading...
Leave a Comment