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

时间:2015-10-03 21:22:51

标签: java algorithm

我正在使用Java LinkedList,据我所知,没有LinkedList.next(int);,但有ListIterator.next(),它通过{{1}发挥作用}}。但是,正如我所知:使用LinkedList.listIterator()遍历元素(花费O(n)时间)将在删除所有元素后失败(对删除本身进行常量操作,但是O(n) )到达元素。)

尝试以简单的方式删除某些k< = n元素,如下所示:

ListIterator

是O(n ^ 2)运算,因为n if (list.get(++index).equals(elementToRemove)) { list.remove(index); } 中的每一个都是O(n)。

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

2 个答案:

答案 0 :(得分:3)

使用Iterator.remove()

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

答案 1 :(得分:1)

如果您不关心就地处理,可以使用

public <T> T[] toArray(T[] a)

功能,然后遍历表格,只将所需的项目添加到新列表