#include #include typedef struct Nodo { int dato; struct Nodo *siguiente; } Nodo; /* Crear un nodo */ Nodo *crearNodo(int dato) { Nodo *nuevo = malloc(sizeof(Nodo)); if (nuevo == NULL) { printf("Error al reservar memoria.\n"); exit(EXIT_FAILURE); } nuevo->dato = dato; nuevo->siguiente = NULL; return nuevo; } /* Insertar al inicio */ void insertarInicio(Nodo **cabeza, int dato) { Nodo *nuevo = crearNodo(dato); nuevo->siguiente = *cabeza; *cabeza = nuevo; } /* Insertar al final */ void insertarFinal(Nodo **cabezon, int dato) { Nodo *nuevo = crearNodo(dato); if (*cabezon == NULL) { *cabezon = nuevo; return; } Nodo *actual = *cabezon; while (actual->siguiente != NULL) { actual = actual->siguiente; } actual->siguiente = nuevo; } /* Recorrer e imprimir */ void recorrer(Nodo *cabeza) { Nodo *actual = cabeza; while (actual != NULL) { printf("%d -> ", actual->dato); actual = actual->siguiente; } printf("NULL\n"); } /* Buscar un valor */ Nodo *buscar(Nodo *cabeza, int dato) { Nodo *actual = cabeza; while (actual != NULL) { if (actual->dato == dato) { return actual; } actual = actual->siguiente; } return NULL; } /* Eliminar la primera coincidencia */ int eliminar(Nodo **cabeza, int dato) { Nodo *actual = *cabeza; Nodo *anterior = NULL; while (actual != NULL && actual->dato != dato) { anterior = actual; actual = actual->siguiente; } if (actual == NULL) { return 0; } if (anterior == NULL) { *cabeza = actual->siguiente; } else { anterior->siguiente = actual->siguiente; } free(actual); return 1; } /* Liberar toda la lista */ void liberarLista(Nodo **cabeza) { Nodo *actual = *cabeza; while (actual != NULL) { Nodo *temporal = actual; actual = actual->siguiente; free(temporal); } *cabeza = NULL; } int main(void) { Nodo *cabeza = NULL; insertarInicio(&cabeza, 20); insertarInicio(&cabeza, 10); insertarFinal(&cabeza, 30); insertarFinal(&cabeza, 40); printf("Lista inicial:\n"); recorrer(cabeza); if (buscar(cabeza, 30) != NULL) { printf("El valor 30 existe.\n"); } else { printf("El valor 30 no existe.\n"); } if (eliminar(&cabeza, 20)) { printf("Se elimino el valor 20.\n"); } printf("Lista despues de eliminar:\n"); recorrer(cabeza); liberarLista(&cabeza); return 0; }