@Override
    public void remove(T toDelete) {
        if(head == null){
            throw new IndexOutOfBoundsException();
        } else {
            Node<T> temp = head;
            while (temp.right != null) {
                if (temp.data.equals(toDelete)) {
                    if (temp.left != null && temp.right != null) {
                        temp.left.right = temp.right;
                        temp.right.left = temp.left;
                    } else if (temp.left != null && temp.right == null) {   // last
                        temp.left.right = null;
                    } else if (temp.left == null && temp.right != null) {   // first
                        temp.right.left = null;
                        head = temp.right;
                    } else {
                        head = null;
                    }

                    size--;
                    return;
                }
            }
        }
    }