public Comparable remove(int index) {
    checkIndex(index); // �ndice v�lido

    DLNode aux = getNode(index);
    Comparable removedElement = aux.getElement();

    if (index == 0) {
      cabeca = (DLNode) aux.getNext();
      if (cabeca == null) cauda = null;
      else cabeca.setPrev(null);

      aux.setNext(null);
    } else {
      Node prev = aux.getPrev();
      Node prox = aux.getNext();

      prev.setNext(prox);

      if (prox != null) ((DLNode) prox).setPrev(prev);
      else cauda = (DLNode) prev;

      aux.setNext(null);
      aux.setPrev(null);
    }
    size--;
    return removedElement;
  }
  public void add(int index, Comparable theElement) {
    DLNode novo = new DLNode(theElement, null, null);

    if (index < 0 || index > size)
      throw new IndexOutOfBoundsException("index = " + index + "  size = " + size);

    if (index == 0) {
      novo.setNext(cabeca);
      if (cabeca != null) cabeca.setPrev(novo);
      else cauda = (DLNode) novo;
      cabeca = (DLNode) novo;
    } else {
      DLNode prev = (DLNode) getNode(index - 1);
      DLNode prox = (DLNode) prev.getNext();

      prev.setNext(novo);
      novo.setPrev(prev);

      novo.setNext(prox);
      if (prox != null) prox.setPrev(novo);
      else cauda = (DLNode) novo;
    }
    size++;
  }