Online C Compiler
Abrir en el compilador

Edición didáctica en español. El código y sus salidas conservan el original.

Lista doblemente enlazada en C

Mantén enlaces hacia delante y hacia atrás al insertar y borrar nodos.

Abrir en el compilador

Lista doblemente enlazada en C
Mantén enlaces hacia delante y hacia atrás al insertar y borrar nodos.

Un nodo doblemente enlazado contiene next y prev. Estos dos enlaces permiten recorrer la lista en ambos sentidos, a costa de un puntero adicional por nodo y más actualizaciones en cada modificación.

Al insertar un nodo entre dos vecinos, conecta ambos lados y corrige los enlaces inversos. Al borrar, une los vecinos antes de liberar el nodo. Los extremos requieren especial cuidado: el primero no tiene anterior y el último no tiene siguiente.

Comprueba la coherencia recorriendo hacia delante y hacia atrás. Prueba borrar el único nodo, la cabeza y la cola; libera todas las asignaciones al terminar.

Código C

#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;
}
Abrir en el compilador

Salida esperada

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

Preguntas frecuentes

¿Por qué el código y la salida siguen en inglés?

Las palabras clave, los identificadores y los textos que verifican las pruebas se conservan para no cambiar el programa. Las explicaciones y los controles están traducidos.