Метод 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");
}
