Благодаря @ talex
И я визуализирую случаи, чтобы быть более ясными
Давайте предположим, что проблема удаления следующих node c
из Связанного списка
И у нас есть ТОЛЬКО доступк этому узлу
Первое решение фактически удалит узел
public void deleteNode(Node node) {
node.data = (node.next).data;
node.next = (node.next).next;
System.gc();
}
При копировании в следующую ячейку(значение и указатель) на ячейку параметра
Таким образом, конечный результат
Ячейка параметра будет считаться удаленной, а Связанный список будет правильно соединен в цепочку
Подсказки:
- Нет проблем, что
node d
не используется ни одним указателем, GC
очистит - Это решение НЕ будет работать, если нам нужно удалить последнюю ячейку
Второе решение НЕ удалит узел
public void deleteNode(Node node) {
node = (node.next);
System.gc();
}
Это потому, что ТОЛЬКО изменится только указатель на ячейку параметра
Таким образом, конечный результат
Параметрячейка НЕ будет удалена, а в связанном списке все еще будет ячейка