package polinomios;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
*
* @author Andrés Mella Romero
*/
//Clase que representa a un polinomio
public class Polinomio {
//Inicio del Polinomio
private Termino cabeza;
//Constructor que inicializa la referencia al Polinomio
public Polinomio() {
cabeza = null;
}
//Método que obtiene el inicio del Polinomio
public Termino getCabeza() {
return cabeza;
}
//Método que verifica si en el polinomio existe un término con un exponente dado
public boolean existeTerminoConExponente(Termino termino) {
//Obtenemos la rerefencia al inicio del polinomio
Termino iterador = cabeza;
//Ciclamos por la lista
while( null != iterador ) {
//Compara los exponentes
if(iterador.getExponente() == termino.getExponente()) {
//SÃ existe!
return true;
}
//Siguiente elemento a iterar
iterador = iterador.getSiguiente();
}
//No existe!
return false;
}
//Similar al anterior, pero este regresa null ó el término
public Termino obtenerTerminoPorExponente(Termino termino) {
//Obtenemos la rerefencia al inicio del polinomio
Termino iterador = this.cabeza;
//Ciclamos por la lista
while( null != iterador ) {
//Compara los exponentes
if(iterador.getExponente() == termino.getExponente()) {
//Lo encontramos!
return iterador;
}
//Siguiente elemento a iterar
iterador = iterador.getSiguiente();
}
//No encontrado!
return null;
}
//Obtienen el último término del Polinomio
private Termino obtenerUltimoTermino() {
//Obtenemos la rerefencia al inicio del polinomio
Termino iterador = cabeza;
//Ciclamos por la lista
while( null != iterador && null != iterador.getSiguiente()) {
//Siguiente elemento a iterar
iterador = iterador.getSiguiente();
}
//Regresar el elemento
return iterador;
}
//Agregar un termino al final del polinomio
public void agregarTermino(Termino termino) {
//Obtenemos el último término del polinomio
Termino ultimoTermino = obtenerUltimoTermino();
//Si no hay último término, agregamos como inicio
if(null == ultimoTermino) {
cabeza= termino;
}else {
//Establecer como siguiente elemento
ultimoTermino.setSiguiente(termino);
}
}
//Imprimir el polionomio
public void imprimir() {
//Obtenemos la rerefencia al inicio del polinomio
Termino iterador = cabeza;
//Una lista para ordenar los elmentos
List<Termino> terminos = new ArrayList<Termino>();
//Ciclamos por el polinomio
while( null != iterador) {
//Agregamos a la lista
terminos.add(iterador);
//Siguiente elemento a iterar
iterador= iterador.getSiguiente();
}
//Ordenamos
Collections.sort(terminos);
//Imprimir!
for(Termino termino : terminos){
System.out.print(termino.toString()+" ");
}
}
}