Удалить узел в LinkedList в Java с учетом ссылки на узел

Например, если у меня есть LinkedList

LinkedList<Integer> ll = new LinkedList<Integer>();
ll.add(1);
ll.add(2);
ll.add(3);
Integer x = new Integer(10);
ll.add(x);
ll.add(4);
// now the list looks like 1->2->3->10->4

// what if I want to remove 10 and I still have the reference to that node x
// what is the API of that
// somethings like ll.remove(x)...

Если я сам реализую двусвязный список, просто

currentNode.prev.next = currentNode.next;
currentNode.next.prev = currentNode.prev;

Поддерживает ли Java-реализация LinkedList эту операцию?


person Alfred Zhong    schedule 12.11.2013    source источник
comment
Вы никогда не добавляли x в свой список.   -  person Sotirios Delimanolis    schedule 12.11.2013
comment
ваш связанный список будет 1->2->3->4, потому что вы никогда не добавляете к нему 10   -  person theDazzler    schedule 12.11.2013
comment
Что вы подразумеваете под у меня все еще есть ссылка на этот узел x? Вы имеете в виду, что после удаления «x» вам все еще нужна ссылка на «x», или вы имеете в виду, что у вас просто есть ссылка на «x», и вы хотите удалить это   -  person asifsid88    schedule 12.11.2013
comment
Извините, забыл добавить x, снова отредактировал   -  person Alfred Zhong    schedule 12.11.2013
comment
Возможный дубликат Указатель на узел Java LinkedList   -  person MikeFHay    schedule 20.02.2018


Ответы (2)


Я считаю, что это просто ошибка копирования и вставки, из-за которой вы забыли добавить узел x в свой связанный список. Предполагая, что ваш правильный код выглядит следующим образом:

Integer x = new Integer(10);
ll.add(x);
ll.add(4);

Вы можете удалить узел из java LinkedList, используя метод remove(Object o). Так что вызовите это, чтобы удалить узел x из связанного списка ll.

ll.remove(x); //removes x from linkedlist but does not delete object x

Он удалит x из связанного списка, но объект x все еще жив в вашем коде и может использоваться где угодно.

person Juned Ahsan    schedule 12.11.2013
comment
Большое спасибо! Это именно то, что я ищу! - person Alfred Zhong; 12.11.2013
comment
Обратите внимание, что это операция O(n). java.util.LinkedList не раскрывает свои внутренние узлы, поэтому единственный способ удалить элемент за постоянное время — это выполнить итерацию по списку. Это делает LinkedList#removeIf тривиально O(n), но не дает никаких преимуществ по сравнению с ArrayList при удалении одного элемента. - person MikeFHay; 20.02.2018