Удаление элемента из LinkedList при индексе

#java #singly-linked-list

#java #односвязный список

Вопрос:

Я хочу кое-что уточнить относительно удаления элементов из LinkedList. Учитывая этот код:

 public boolean remove(int index)
{
    // if the index is out of range, exit
    if(index < 1 || index > size())
        return false;

    Node current = head;
    for(int i = 1; i < index; i  )
    {
        if(current.getNext() == null)
            return false;

        current = current.getNext();
    }
    current.setNext(current.getNext().getNext());
    listCount--; 
    return true;
}
  

Из того, что я вижу, этот код заканчивается на элементе перед тем, который вы хотите удалить. Затем он присваивает узлу поле «next» после того, которое вы хотите удалить. Мой вопрос в том, не нужно ли вам присваивать полю «next» узла, который вы хотите удалить, значение null? Я немного смущен, потому что похоже, что поле «next» все еще указывает на элемент после, поэтому у вас есть 2 узла, указывающие на него.

Любая помощь будет оценена.

Комментарии:

1. Но этот элемент больше не будет доступен из списка, т. Е. С помощью методов списка это ни на что не повлияет.

Ответ №1:

вам не нужно присваивать «следующему» полю узла, который вы хотите удалить, значение null?

Для этого нет веской причины в Java.

Я немного смущен, потому что

Вы, должно быть, думаете о том, как работает другой язык, такой как C , где вы должны сделать это, чтобы очистить интеллектуальный указатель, поскольку он использует количество ссылок.

В Java ссылка — это просто 4-байтовый указатель (или индекс на объект)

похоже, что поле «next» все еще указывает на элемент после, поэтому у вас есть 2 узла, указывающие на него.

Это объект, на который нет ссылок, поэтому он фактически не существует. Все, что он делает, это тратит немного памяти, пока сборщик мусора не очистит ее.

Комментарии:

1. Спасибо, теперь это имеет смысл

Ответ №2:

похоже, что поле «next» по-прежнему указывает на элемент после

Это не важно, поскольку ничто не указывает на удаленный узел, в конечном итоге он будет автоматически удален сборщиком мусора.