Я довольно долго размышлял об этом и пока не нашел хорошего ответа на этот вопрос в SO.
Я хочу найти элемент в связанном списке и удалить его.это сразу.Если бы я сам создал связанный список, это было бы легко, поскольку я просто перебрал бы дважды связанный список:
-> N1 <-> N2 <-> N3 <-> N4 <-> N5 <-
, а когда вы найдете, например, N3, вы измените указатели node.previous и node.next.такой что:
-> N1 <-> N2 <-> N4 <-> N5 <-
Если элемент находится посередине, это потребует примерно n / 2 шагов.
Есть ли правильный подход для этого в java.util.LinkedList<Integer>
?
Подход, который для меня недостаточен:
Integer found = null;
for(Integer elem : list){
if(hasCertainProperty(elem)){
found = elem;
}
}
if(found != null){
list.remove(found);
}
Если элемент является средним элементом в списке (двойной связанный список, поэтому выполняйте поиск с конца спискатеоретически возможно, если индекс известен), это потребовало бы максимум примерно n / 2 + n / 2 = n шагов.Принимая во внимание, что при самодельном прохождении потребуется только n / 2 шага.
Я знаю, что эти 2 и другие подходы в O (n), но вы знаете, иногда, что n / 2 имеет значение на практике.
Спасибо за вашу помощь.