Lista circular en C: ejercicio resuelto con inserción y recorrido

Lista circular en C: ejercicio resuelto

Si buscas lista circular en C ejercicio resuelto, este ejemplo te enseña cómo insertar nodos y recorrer la lista sin bucles infinitos.

Enunciado

Implementa una lista circular simple con:

  • inserción al final,
  • recorrido completo,
  • liberación de memoria.

Solución en C

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <stdio.h>
#include <stdlib.h>

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

void insert_end(Node **head, int x) {
    Node *n = malloc(sizeof(Node));
    if (!n) return;
    n->value = x;

    if (*head == NULL) {
        n->next = n;
        *head = n;
        return;
    }

    Node *cur = *head;
    while (cur->next != *head) cur = cur->next;

    cur->next = n;
    n->next = *head;
}

void print_list(Node *head) {
    if (!head) return;
    Node *cur = head;
    do {
        printf("%d ", cur->value);
        cur = cur->next;
    } while (cur != head);
    printf("\n");
}

void free_list(Node **head) {
    if (!*head) return;
    Node *cur = (*head)->next;
    while (cur != *head) {
        Node *tmp = cur;
        cur = cur->next;
        free(tmp);
    }
    free(*head);
    *head = NULL;
}

int main(void) {
    Node *head = NULL;
    insert_end(&head, 5);
    insert_end(&head, 10);
    insert_end(&head, 15);

    print_list(head);
    free_list(&head);
    return 0;
}

Salida esperada

1
5 10 15

Errores frecuentes

  • Recorrer con while (cur != NULL) en lugar de do-while.
  • No cerrar el ciclo apuntando al head.
  • Liberar memoria sin romper el recorrido circular.

Aplicación práctica

Las listas circulares se usan en planificación round-robin y buffers con rotación.

Siguiente ejercicio recomendado

Práctica guiada y libro completo

Si quieres una ruta completa con progresión real de dificultad:

FAQ

¿Qué diferencia hay entre lista simple y lista circular?

En la circular, el último nodo apunta al primero. En la simple, el último termina en NULL.

¿Para qué sirve una lista circular en proyectos reales?

Para repartir turnos, tareas repetitivas y estructuras cíclicas de procesamiento.

¿Cómo evitar bucles infinitos al recorrerla?

Usa un puntero inicial de referencia y detén el recorrido cuando vuelvas a ese nodo.