public T eliminar(int pos) {
      T valor = null;

      if ((pos >= numElems) || pos < 0) {
        throw new IndiceFueraDeRangoException(pos);
      } else if (pos == 0) {
        if (primero.equals(ultimo)) {
          ultimo = null;
        }
        valor = primero.darElemento();
        primero = primero.desconectarPrimero();
        numElems--;
        return valor;
      } else {

        NodoLista<T> p = primero.darSiguiente();
        for (int cont = 1; cont < pos; cont++) {
          p = p.darSiguiente();
        }

        if (p.equals(ultimo)) {
          ultimo = p.darAnterior();
        }
        valor = p.darElemento();
        p.desconectarNodo();
        numElems--;
        return valor;
      }
    }
 public T eliminar(T elemento) throws NoExisteException {
   T valor = null;
   if (primero == null) {
     throw new NoExisteException("Elemento no existe");
   } else if (primero.darElemento().equals(elemento)) {
     if (primero.equals(ultimo)) {
       ultimo = null;
     }
     valor = primero.darElemento();
     primero = primero.desconectarPrimero();
     numElems--;
     return valor;
   } else {
     for (NodoLista<T> p = primero.darSiguiente(); p != null; p = p.darSiguiente()) {
       if (p.darElemento().equals(elemento)) {
         if (p.equals(ultimo)) {
           ultimo = p.darAnterior();
         }
         valor = p.darElemento();
         p.desconectarNodo();
         numElems--;
         return valor;
       }
     }
     throw new NoExisteException("Elemento no existe");
   }
 }
 public void eliminarNodo(NodoLista<T> nodo) throws NoExisteException {
   if (buscar(nodo.darElemento()) != null) {
     throw new NoExisteException("El nodo especificado no pertenece a la lista");
   }
   if (primero == nodo) {
     primero = nodo.desconectarPrimero();
     if (ultimo == nodo) {
       ultimo = null;
     }
   } else {
     if (ultimo == nodo) {
       ultimo = nodo.darAnterior();
     }
     nodo.desconectarNodo();
   }
 }