Метод remove в LinkedList

При удалении элемента со списка с индексом 0 генерируется исключение, нужна помощь в исправлении кода метода remove.

        @Override
public E remove(int index) {
    if (size > 0) {
        checkIndexAndSize(index);
        Node<E> node;
        node = firstNode.next;
        for (int i = 0; i < index; i++) {
            node = node.next;
        }

        if (size > 1) {
            node.prev.next = node.next;
            node.next.prev = node.prev;
        }
        size--;
        return node.currentElement;
    }
    throw new NegativeArraySizeException("The list is empty, deletion is impossible");
}

Ошибка


Ответы (2 шт):

Автор решения: Igor

Чему равен node.prev у первого элемента? А node.next у последнего?


Решил проблему, при удалении нулевого элемента нужно менять ссылку не у предыдущего а у первого листа, в итоге получится:

Нет.

    Node<E> node = firstNode.next;
    checkIndexAndSize(index);
    if (index == 0) {
        firstNode = node;
        if (node != null)
            node.prev = null;
    } ...
→ Ссылка
Автор решения: Slavuuhhaaa

Решил проблему, при удалении нулевого элемента нужно менять ссылку не у предыдущего а у первого листа, в итоге получится:

        @Override
public E remove(int index) {
    if (size > 0 && index - 1 < size) {
        Node<E> node = firstNode.next;
        checkIndexAndSize(index);
        if (index == 0) {
            firstNode.next=node.next;
            node.next.prev=firstNode;
        } else if (index > 0) {
            for (int i = 0; i < index; i++) {
                node = node.next;
            }
            if (size > 1) {
                node.prev.next = node.next;
                node.next.prev = node.prev;

            }
        }

        size--;
        return node.currentElement;
    }
    throw new NegativeArraySizeException("The list is empty, deletion is impossible");
}
→ Ссылка