Online C Compiler
Abrir en el compilador

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

Lista enlazada simple en C

Crea, recorre y libera nodos enlazados mediante punteros.

Abrir en el compilador

Lista enlazada simple en C
Crea, recorre y libera nodos enlazados mediante punteros.

Cada nodo guarda un dato y un puntero al siguiente nodo. head señala el primero; NULL indica el final o una lista vacía. A diferencia de un array, los nodos no tienen que ocupar direcciones consecutivas.

Comprueba malloc antes de escribir en un nodo. Al insertar o borrar, conserva el enlace al resto de la lista y actualiza head si cambia el primer nodo. Buscar un valor requiere recorrer la lista y cuesta O(N).

Para liberar la lista, guarda el siguiente puntero antes de llamar a free sobre el nodo actual. Prueba listas vacías, de un nodo y de varios nodos; nunca consultes un nodo después de liberarlo.

Código C

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

typedef struct Node {
    int data;
    struct Node *next;
} Node;

Node* insertHead(Node *head, int val) {
    Node *newNode = (Node *)malloc(sizeof(Node));
    newNode->data = val;
    newNode->next = head;
    return newNode;
}

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

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

int main() {
    Node *head = NULL;
    head = insertHead(head, 30);
    head = insertHead(head, 20);
    head = insertHead(head, 10);

    printf("Linked List: ");
    printList(head);

    freeList(head);
    return 0;
}
Abrir en el compilador

Salida esperada

Linked List: 10 -> 20 -> 30 -> 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.