Edizione didattica italiana
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 compilatoreRisultato 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.