java - 在 O(n) 时间内遍历 LinkedList 并删除 k 个元素

标签 java algorithm

我用的是Java的LinkedList,据我所知,没有LinkedList.next(int);,但是有ListIterator.next (),它通过 LinkedList.listIterator() 发挥作用。然而,正如我发现的那样:使用 ListIterator 遍历元素(这需要 O(n) 时间)将在你删除所有元素后失败(对删除本身的常量时间操作,但是O(n) 到达元素)。

尝试以直接的方式删除一些 k <= n 元素,类似于:

if (list.get(++index).equals(elementToRemove))
{
    list.remove(index);
}

是一个 O(n^2) 操作,因为 n 个 get() 中的每一个都是 O(n)。

有没有办法在线性时间内遍历 LinkedList 并删除应该去的元素?

最佳答案

使用Iterator.remove() :

for (Iterator<T> iterator = list.iterator(); iterator.hasNext(); ) {
    T element = iterator.next();
    if (element.equals(elementToRemove)) {
        iterator.remove();
    }
}

关于java - 在 O(n) 时间内遍历 LinkedList 并删除 k 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32927628/

相关文章:

Java android Java.io.FileNotFoundException : No content provider:/storage/emulated/0/Android/data

java - HTMLPanel 可以在 uiBinder 中使用,即使它没有无参数构造函数。怎么会?

python - 正整数数组,有效实现的想法

购买最多元素的算法

python - 查找数组的连续总和

algorithm - 最小堆到最大堆,比较

java - 如何更改 JTabbedPane 的背景颜色?

java - Applet JSObject javascript 调用是否序列化?

path - 水平和垂直遍历点的算法

java - java.library.path中的Ktor No netty_transport_native_epoll_x86_64