Ближайшая вещь, которую вы можете получить по прямой ссылке, - это Iterator
, которая указывает на конкретную c точку.
Если вы звоните remove()
на такой Iterator
it должно работать в O (1):
LinkedList<Object> linkedList = ...;
Iterator<Object> it = linkedList.iterator();
while (it.hasNext()) {
if (matchesSomeCondition(it.next()) {
it.remove();
}
}
Обратите внимание, что этот пример кода определенно не работает в O (1), это конкретно просто вызов remove()
, который может иметь такую эффективность. Если вы еще не определили узел каким-либо образом (например, поместили Iterator
в этом месте), то вы не сможете удалить элемент из LinkedList
за O (1) раз.
Редактировать , и поскольку вы упомянули элемент "последний добавленный", то, возможно, вам стоит использовать ListIterator
, поскольку он имеет метод add()
. Если вы можете эффективно реализовать все ваши добавления / удаления, используя ListIterator
, то вы можете свести операции обхода к LinkedList
к минимуму. Фактически, если вы всегда используете индексы для добавления / удаления объектов из вашего LinkedList
, тогда вы теряете большую часть его эффективности (поскольку каждый вызов add
/ remove
должен сначала найти затронутый элемент посредством обхода).