小编And*_*i R的帖子

Java:从链表中查找和删除元素的最佳方法

我一直想知道这个问题已经有一段时间了,在SO上还没有找到一个好的答案。

我想做的是在链表中找到一个元素并立即将其删除。如果我自己构建链表,那将很容易,因为我只是遍历双重链表:

-> N1 <-> N2 <-> N3 <-> N4 <-> N5 <-
Run Code Online (Sandbox Code Playgroud)

当找到例如N3时,可以更改node.previous和node.next指针,例如:

-> N1 <-> N2 <-> N4 <-> N5 <-
Run Code Online (Sandbox Code Playgroud)

如果元素在中间,则大约需要2个步骤。

是否有适当的方法可以做到这一点java.util.LinkedList<Integer>

对我来说不足的方法是:

Integer found = null;
for(Integer elem : list){
    if(hasCertainProperty(elem)){
        found = elem;
    } 
}
if(found != null){
    list.remove(found);
}
Run Code Online (Sandbox Code Playgroud)

如果该元素是列表中的中间元素(双链表,则从理论上讲,如果知道索引,则可以从列表末尾进行搜索),它最多需要大约n / 2 + n / 2 = n个步长。而在自制遍历中,只需要n / 2步。

我知道这2种方法和其他方法都在O(n)中,但是您知道,有时n / 2在实践中会有所不同。

谢谢你的帮助。

java linked-list doubly-linked-list

2
推荐指数
1
解决办法
77
查看次数

标签 统计

doubly-linked-list ×1

java ×1

linked-list ×1