#include <stdio.h>
// Estructura de un nodo de la lista
struct Nodo {
int dato;
struct Nodo* siguiente;
};
// Función para intercambiar dos nodos
void intercambiar(struct Nodo* a, struct Nodo* b) {
int temp = a->dato;
a->dato = b->dato;
b->dato = temp;
}
// Función para ordenar la lista utilizando el algoritmo de ordenamiento de burbuja
void ordenarLista(struct Nodo* cabeza) {
int intercambiado;
struct Nodo* actual;
struct Nodo* siguiente = NULL;
// Caso base
if (cabeza == NULL)
return;
do {
intercambiado = 0;
actual = cabeza;
while (actual->siguiente != siguiente) {
if (actual->dato > actual->siguiente->dato) {
intercambiar(actual, actual->siguiente);
intercambiado = 1;
}
actual = actual->siguiente;
}
siguiente = actual;
} while (intercambiado);
}
// Función para imprimir la lista
void imprimirLista(struct Nodo* nodo) {
while (nodo != NULL) {
printf("%d ", nodo->dato);
nodo = nodo->siguiente;
}
printf("\n");
}
int main() {
// Crear la lista
struct Nodo* cabeza = NULL;
struct Nodo* segundo = NULL;
struct Nodo* tercero = NULL;
cabeza = (struct Nodo*)malloc(sizeof(struct Nodo));
segundo = (struct Nodo*)malloc(sizeof(struct Nodo));
tercero = (struct Nodo*)malloc(sizeof(struct Nodo));
cabeza->dato = 3;
cabeza->siguiente = segundo;
segundo->dato = 2;
segundo->siguiente = tercero;
tercero->dato = 1;
tercero->siguiente = NULL;
// Imprimir la lista antes de ordenarla
printf("Lista original: ");
imprimirLista(cabeza);
// Ordenar la lista
ordenarLista(cabeza);
// Imprimir la lista después de ordenarla
printf("Lista ordenada: ");
imprimirLista(cabeza);
return 0;
}