/*
 * PilaEnlazada.java
 *
 */

public class PilaEnlazada
{

    class Nodo
    {
        Object elem;
        Nodo siguiente;
        public Nodo(Object o)
        {
            elem = o;
            siguiente = null;
        }
    }
    Nodo tope;
    int tamaņo;


    public PilaEnlazada()
    {
        tope = null;
        tamaņo = 0;
    }
    public void insertar(Object o)
    {
        Nodo nuevo = new Nodo(o);
        if (tope == null)
            tope = nuevo;
        else
        {
            nuevo.siguiente = tope;
            tope = nuevo;
        }
        tamaņo++;
    };  //inserta el objeto o en el tope de la pila

    public Object retirar()
    {
        if (tope == null) return null; ;
        Object o = tope.elem;
        tope = tope.siguiente;
        tamaņo--;
        return o;
    }//coge el objeto del tope de la pila y lo retira   

    public boolean estaVacia()
    {

        return (tamaņo == 0);
    }


    public int tamaņo()
    {

        return tamaņo;
    }

    public Object tope()
    {

        if (tope == null) return null;
        else return tope.elem;
    }

    /* apartado 1 */

    public String toString()
    {
        Nodo aux = tope;
        String res = "";
        while (aux != null)
        {
            res += aux.elem + "   \n";
            aux = aux.siguiente;
        }
        return res;
    }

    public void eliminarDelMedio(int posicion)
    {
        Nodo aux = tope;
        Nodo anterior = null;
        for(int i = (tamaņo-1); i>posicion;i--) 
        {
            anterior = aux;
            aux = aux.siguiente;
        }
        if (anterior != null)
            anterior.siguiente = aux.siguiente;
        else
            tope = tope.siguiente;
    }


} //class PilaEnlazada

