Nodo* sumarPolinomios(Nodo* p1, Nodo* p2) {
Nodo* resultado = nullptr; // Lista para almacenar el resultado
Nodo** ultimo = &resultado; // Puntero al último nodo de la lista resultado
while (p1 != nullptr || p2 != nullptr) {
int coeficiente = 0;
int exponente;
if (p1 != nullptr && (p2 == nullptr || p1->exponente > p2->exponente)) {
// Tomar el término de p1
coeficiente = p1->coeficiente;
exponente = p1->exponente;
p1 = p1->siguiente;
} else if (p2 != nullptr && (p1 == nullptr || p2->exponente > p1->exponente)) {
// Tomar el término de p2
coeficiente = p2->coeficiente;
exponente = p2->exponente;
p2 = p2->siguiente;
} else {
// Los exponentes son iguales, sumar los coeficientes
coeficiente = p1->coeficiente + p2->coeficiente;
exponente = p1->exponente;
p1 = p1->siguiente;
p2 = p2->siguiente;
}
// Solo agregar el término si el coeficiente no es cero
if (coeficiente != 0) {
*ultimo = new Nodo(coeficiente, exponente);
ultimo = &((*ultimo)->siguiente);
}
}
return resultado; // Retorna la lista resultado
}