#include <stdio.h>
#include <stdlib.h>
typedef struct Nodo {
int coeficiente; // Coeficiente del término
int exponente; // Exponente del término
struct Nodo* siguiente; // Puntero al siguiente nodo
} Nodo;
// Función para crear un nuevo nodo
Nodo* crear_nodo(int coeficiente, int exponente) {
Nodo* nuevo_nodo = (Nodo*)malloc(sizeof(Nodo));
nuevo_nodo->coeficiente = coeficiente;
nuevo_nodo->exponente = exponente;
nuevo_nodo->siguiente = NULL;
return nuevo_nodo;
}
// Función para insertar un término en la lista
void insertar_termino(Nodo** cabeza, int coeficiente, int exponente) {
Nodo* nuevo_nodo = crear_nodo(coeficiente, exponente);
if (*cabeza == NULL) {
*cabeza = nuevo_nodo;
} else {
Nodo* actual = *cabeza;
Nodo* anterior = NULL;
// Insertar en orden decreciente de exponentes
while (actual != NULL && actual->exponente > exponente) {
anterior = actual;
actual = actual->siguiente;
}
// Si el exponente ya existe, sumar los coeficientes
if (actual != NULL && actual->exponente == exponente) {
actual->coeficiente += coeficiente;
free(nuevo_nodo); // Liberar el nodo si se suma
} else {
nuevo_nodo->siguiente = actual;
if (anterior == NULL) {
*cabeza = nuevo_nodo; // Insertar al inicio
} else {
anterior->siguiente = nuevo_nodo; // Insertar en medio
}
}
}
}
// Función para imprimir el polinomio
void imprimir_polinomio(Nodo* cabeza) {
Nodo* actual = cabeza;
while (actual != NULL) {
printf("%dx^%d", actual->coeficiente, actual->exponente);
if (actual->siguiente != NULL) {
printf(" + ");
}
actual = actual->siguiente;
}
printf("\n");
}
// Función para liberar la memoria de la lista
void liberar_lista(Nodo* cabeza) {
Nodo* actual = cabeza;
while (actual != NULL) {
Nodo* siguiente = actual->siguiente;
free(actual);
actual = siguiente;
}
}
int main() {
Nodo* polinomio = NULL;
int coeficiente, exponente;
char continuar;
do {
printf("Ingrese el coeficiente: ");
scanf("%d", &coeficiente);
printf("Ingrese el exponente: ");
scanf("%d", &exponente);
insertar_termino(&polinomio, coeficiente, exponente);
printf("¿Desea agregar otro término? (s/n): ");
scanf(" %c", &continuar);
} while (continuar == 's' || continuar == 'S');
printf("El polinomio reducido es: ");
imprimir_polinomio(polinomio);
liberar_lista(polinomio);
return 0;
}