/*
Este es ejemplo muestra cómo implementar una lista enlazada en C.
Se crea una lista enlazada que puede almacenar enteros.
También tiene funciones básicas para agregar nodos al principio de la lista,
para imprimir los nodos de la lista.
*/
#include <stdio.h>
#include <stdlib.h>
// Definición de la estructura de un nodo para la lista enlazada.
typedef struct nodo {
int dato; // Variable para almacenar el dato del nodo.
struct nodo *siguiente; // Puntero al siguiente nodo en la lista.
} Nodo;
// Función para crear un nuevo nodo.
// Recibe un entero 'dato' y retorna un puntero al nuevo nodo creado.
Nodo* crearNodo(int dato) {
Nodo *nuevoNodo = (Nodo*) malloc(sizeof(Nodo)); // Asigna memoria para el nuevo nodo.
if (nuevoNodo == NULL) { // Verifica si la memoria fue asignada correctamente.
printf("Error al asignar memoria\n"); // Imprime un mensaje de error si no hay memoria disponible.
exit(1); // Termina el programa si no hay memoria.
}
nuevoNodo->dato = dato; // Asigna el dato proporcionado al nodo.
nuevoNodo->siguiente = NULL; // Inicializa el puntero del siguiente nodo a NULL.
return nuevoNodo; // Retorna el puntero al nuevo nodo.
}
// Función para agregar un nodo al inicio de la lista.
// Recibe un doble puntero 'cabeza' a la cabeza de la lista y un entero 'dato'.
void agregarAlInicio(Nodo **cabeza, int dato) {
Nodo *nuevoNodo = crearNodo(dato); // Crea un nuevo nodo con el dato proporcionado.
nuevoNodo->siguiente = *cabeza; // Establece el siguiente del nuevo nodo al actual cabeza.
*cabeza = nuevoNodo; // Actualiza la cabeza de la lista al nuevo nodo.
}
// Función para imprimir todos los nodos de la lista.
// Recibe un puntero 'cabeza' al primer nodo de la lista.
void imprimirLista(Nodo *cabeza) {
Nodo *temporal = cabeza; // Crea un puntero temporal para recorrer la lista.
while (temporal != NULL) { // Continúa hasta que no haya más nodos.
printf("%d -> ", temporal->dato); // Imprime el dato del nodo actual.
temporal = temporal->siguiente; // Avanza al siguiente nodo en la lista.
}
printf("NULL\n"); // Imprime NULL al final de la lista.
}
// Función principal que ejecuta el programa.
int main() {
Nodo *cabeza = NULL; // Inicializa la cabeza de la lista a NULL.
agregarAlInicio(&cabeza, 30); // Agrega el nodo con dato 30 al inicio de la lista.
agregarAlInicio(&cabeza, 20); // Agrega el nodo con dato 20 al inicio de la lista.
agregarAlInicio(&cabeza, 10); // Agrega el nodo con dato 10 al inicio de la lista.
imprimirLista(cabeza); // Imprime toda la lista.
return 0; // Finaliza la ejecución del programa.
}
To embed this program on your website, copy the following code and paste it into your website's HTML: