Untitled

mail@pastecode.io avatar
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