2016-10-08 4 views
1

Я ищу, чтобы прояснить что-то относительно удаления элементов из LinkedList. С учетом этого кода:Удаление элемента из 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; 
} 

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

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

+0

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

ответ

2

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

Для Java нет веских оснований.

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

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

В Java, ссылка только указатель 4 байта (или индекс к объекту)

это выглядит как «следующий» поле все еще указывает на элемент после, поэтому у вас есть 2 узлов, указывающей к нему.

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

+1

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

0

это выглядит как «следующий» поле все еще указывает на элемент после

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

Смежные вопросы