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
#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
5 10 15Errores frecuentes
- Recorrer con
while (cur != NULL)en lugar dedo-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
- Árbol binario en C: ejercicio resuelto de inserción y búsqueda
- Lista doblemente enlazada en C: ejercicio resuelto con inserción y recorrido
- fread y fwrite en C: ejercicio resuelto con archivo binario
- Todos los ejercicios de C
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.