public class Lista
{
	private Nodo  inicio;
	
	public Lista()
	{
		inicio=null;
	}
	
	
	public void reducir()
	{
		Nodo p=null, ant=null, p1=null, p2=null, nuevo=null;
		int x=0;
		p1=inicio;
		p2=inicio.getSgt();
		inicio=p2.getSgt();
		x=p1.getDato()+ p2.getDato();
		nuevo =new Nodo(x);
		
		p=inicio;
		ant=null;
		while(p!=null && p.getDato()<x)
		{
			ant=p;
			p=p.getSgt();
		}
		if(ant==null)
		{
			nuevo.setSgt(inicio);
			inicio=nuevo;
		}
		else
		{
			ant.setSgt(nuevo);
			nuevo.setSgt(p);
		}
				
	}
	
	
	public void insertarInicio(int dato)
	{
		Nodo nuevoNodo=new Nodo(dato);
		nuevoNodo.setSgt(inicio);
		inicio=nuevoNodo;
		
		
	}
	
	public void insertarFinal(int dato)
	{
		//O(n)
		Nodo nuevoNodo=new Nodo(dato);
		Nodo p=null;
		p=inicio;
		if(p!=null)
		{
			while(p.getSgt()!=null)
			{
				p=p.getSgt();
			}
			p.setSgt(nuevoNodo);
		}else
		{
			inicio=nuevoNodo;
		}
	}
	
	public void insertarEnOrden(int dato)
	{
		Nodo nuevoNodo=new Nodo(dato);
		Nodo p=null;
		Nodo ant=null;
		p=inicio;
		if(p==null)
		{
			inicio=nuevoNodo;
		}
		else
		{
			while(p!=null&& p.getDato()<dato)
			{
				ant=p;
				p=p.getSgt();
			}
			if(ant!=null)
			{
				ant.setSgt(nuevoNodo);
				nuevoNodo.setSgt(p);
			}
			else
			{
				nuevoNodo.setSgt(p);
				inicio=nuevoNodo;
			}
		}
		
	}
	
	public void reportar()
	{
		Nodo p=inicio;
		while(p!=null)
		{
			System.out.println(p.getDato() + " ");
			p=p.getSgt();
		}
	}
	
}
