class ColaEnlazada implements Cola {

    protected Nodo primero = null;
    protected Nodo ultimo = null;

    public boolean estaVacia() {
        return (primero == null);
    }

    public int tamaņo() {

        Nodo actual= primero;
        int i;

        for (i = 0; actual != null; i++) {
            actual = actual.getSiguiente();
        }
            
        return i;
    }

    public Object primero() {

        if (primero != null) {
            return primero.getDato();
        } else {
            return null;
        }
    }

    public void insertar(Object dato, Comparable clave) {

        if (dato != null) {
            Nodo n = new Nodo();
            n.setDato(dato);
            n.setClave(clave);
            if (ultimo != null) {
                ultimo.setSiguiente(n);
                ultimo = n;
            } else {
                primero = n;
                ultimo = n;
            }
        }
    }

    public Object retirar() {
        Object dato = null;
        
        if (primero != null) { 
            dato = primero.getDato();
            primero = primero.getSiguiente();
            if (primero == null) {
                ultimo = null;
            }
        }
        return dato;
    }

    public void insertarNoDuplicado(String dato, Comparable clave) {
        Nodo actual = primero;
        boolean encontrado = false;
        
        while (actual != null && !encontrado) {
            if (clave.compareTo(actual.getClave()) == 0) {
                encontrado = true;
            }
            actual = actual.getSiguiente();
        }
        
        if (!encontrado) {
            insertar(dato, clave);
        }
    }
    
    public static void main(String[] args) {

        ColaEnlazada q= new ColaEnlazada();

        q.insertar("a", "--a");
        q.insertar("b", "--b");
        q.insertar("c", "--c");
        q.insertar("d", "--d");
        q.insertarNoDuplicado("z", "--z");
        q.insertarNoDuplicado("otro-d", "--d");
        q.insertarNoDuplicado("otro-a", "--a");
        q.insertarNoDuplicado("e", "--e");
        
        Object o;
        while ((o=q.retirar()) != null) {
            System.out.println(o);
        }
    }

}

