java - 从 Java 链表中删除最小元素

标签 java data-structures

我正在尝试从 Java LinkedList 中删除最小元素。

为了找到最小值,我必须遍历一次LinkedList。我想保存该元素的节点或迭代器以在 O(1) 中将其删除。

正常

list.remove(Object o)

需要 O(n) 步。

void removeMin(LinkedList<Integer> list) {
    ListIterator<Integer> itList = list.listIterator();

    Integer min = itList.next();

    while(itList.hasNext()) {
        Integer curVal = itList.next();
        if(curVal < min) {
            min = curVal 
            // Copy the iterator here?
        }        
    }
    // remove min from list here.
}

有没有办法在找到新的最小值时复制迭代器,然后我可以调用迭代器的 remove()?

最佳答案

您可以通过这种方式在当前 .next 索引处复制迭代器:

ListIterator<Integer> minItList = List.listIterator(itList.nextIndex());

解决方案如下:

ListIterator<Integer> itList = list.listIterator();
ListIterator<Integer> minItList = list.listIterator();

Integer min = itList.next();

while(itList.hasNext()) {
    Integer curVal = itList.next();
    if(curVal < min) {
        min = curVal; 
        // Copy the iterator here?
        minItList = list.listIterator(itList.nextIndex());
    }        
}
  // remove min from list here.
  minItList.previous();  
  minItList.remove();  //note that you can't call .remove() on list iterator until .next() or .previous() have been called once because you will get IllegalStateException

关于java - 从 Java 链表中删除最小元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43047832/

相关文章:

python - 在 python 中声明复杂数据结构的类型

C 创建有序优先级队列

java - 用于登录验证的xml文件

java - 解析字符串以在 Java 中构造树

Java - 对象多次创建自身 - 有任何设计模式吗?

java - 从 ArrayList 数组中检索数据

data-structures - 来自第一个元素列表数据结构的功能 O(1) 追加和 O(n) 迭代

c++ - 一个 "hits in last [second/minute/hour]"数据结构的实现

java - Java中如何操作数组?

java - addFilter 和 addListener 的区别