Online C Compiler
Apri nel compilatore

Edizione didattica italiana

Lista doppiamente concatenata in C

Gestisci collegamenti avanti e indietro e verifica la coerenza dei nodi.

Apri nel compilatore

Lista doppiamente concatenata in C
Gestisci collegamenti avanti e indietro e verifica la coerenza dei nodi.

Ogni nodo ha next e prev per percorrere la lista nei due sensi. Questo richiede un puntatore aggiuntivo e aggiornamenti coerenti su entrambi i lati.

Per inserire tra due vicini, collega entrambi i lati e correggi i collegamenti inversi. Per rimuovere un nodo collega prima i vicini, poi liberalo. Il primo non ha precedente e l’ultimo non ha successivo.

Controlla la lista percorrendola in entrambi i sensi. Prova a rimuovere testa, coda e unico nodo. Libera tutte le allocazioni alla fine.

Codice sorgente

#include <stdio.h>
#include <stdlib.h>

typedef struct DNode {
    int data;
    struct DNode *prev;
    struct DNode *next;
} DNode;

DNode* insertHead(DNode *head, int val) {
    DNode *newNode = (DNode *)malloc(sizeof(DNode));
    newNode->data = val;
    newNode->prev = NULL;
    newNode->next = head;
    if (head != NULL) head->prev = newNode;
    return newNode;
}

void printForward(DNode *head) {
    DNode *curr = head;
    while (curr != NULL) {
        printf("%d <-> ", curr->data);
        curr = curr->next;
    }
    printf("NULL\n");
}

void freeDList(DNode *head) {
    DNode *curr = head;
    while (curr != NULL) {
        DNode *temp = curr;
        curr = curr->next;
        free(temp);
    }
}

int main() {
    DNode *head = NULL;
    head = insertHead(head, 300);
    head = insertHead(head, 200);
    head = insertHead(head, 100);

    printf("Doubly Linked List: ");
    printForward(head);

    freeDList(head);
    return 0;
}
Apri nel compilatore

Risultato atteso

Doubly Linked List: 100 <-> 200 <-> 300 <-> NULL

Domande frequenti

Perché il codice e alcuni risultati restano in inglese?

Parole chiave C, identificatori, commenti del programma e output attesi restano quelli originali per preservare codice eseguibile e test coerenti. Spiegazioni e istruzioni sono tradotte.