有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

我正在使用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)操作,因为每个nget()都是O(n)

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


共 (2) 个答案

  1. # 1 楼答案

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

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

    函数,然后遍历该表,只向新列表中添加所需的项

  2. # 2 楼答案

    使用^{}

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