Édition pédagogique en français
Liste doublement chaînée en C
Maintenez les liens avant et arrière pendant les insertions et suppressions.

Un nœud possède next et prev, ce qui permet les deux sens de parcours. Ce confort coûte un pointeur supplémentaire et davantage de mises à jour cohérentes.
Pour insérer entre deux voisins, reliez les deux côtés et corrigez les liens inverses. Pour supprimer, reliez les voisins avant de libérer le nœud. Le premier n’a pas de précédent ; le dernier n’a pas de suivant.
Contrôlez la cohérence par un parcours dans chaque sens. Testez la suppression de la tête, de la queue et du seul nœud. Libérez toutes les allocations à la fin.
Code source
#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;
}Ouvrir dans le compilateurRésultat attendu
Doubly Linked List: 100 <-> 200 <-> 300 <-> NULL
Questions fréquentes
Pourquoi le code et certains résultats restent-ils en anglais ?
Les mots-clés C, les identifiants, les commentaires du programme et les sorties attendues restent ceux de la version originale pour conserver un code exécutable et des tests cohérents. Les explications et les consignes sont traduites.