繁体   English   中英

Java链接列表:使用迭代器删除最大的元素

[英]Java Linked List: Removing Largest Element Using Iterator

如何从java中的链表中删除最大的元素? 我知道我可以使用get()或remove()函数来检索/删除元素。 但我想让它变得高效。 我想使用迭代器。 你知道我怎么做吗? 请注意,我不想创建自己的链表。 我甚至不想对我的链表进行排序。

我可以对此进行线性搜索吗? 如果是这样,我如何跟踪指向最大元素的指针(或迭代器)。 任何帮助将不胜感激。

链接列表(除非已排序)不是您尝试在此处执行的最佳结构,因为除了执行线性搜索并删除最大元素之外没有其他选项

Integer biggest = Integer.MIN_VALUE;
for(Integer e : myList){
   if(biggest < e)
        biggest = e;
}
myList.remove(biggest);

这将是O(n),即使您必须再次扫描以删除最大的,如果您执行自己的LinkedList,则第二次扫描将是可以避免的,因为java.util.LinkedList隐藏其Entry类并且不允许您修改指针; 但这将是错误的优化方式,因为如果你使用类似堆的结构,在java中将是PriorityQueue类,你可以获得O(log(n))并将代码减少到:

return myPriorityQueue.poll();

如果你知道最大的元素是什么,你就可以这样做

Iterator<Integer> it = list.iterator();
Integer toRemove;
while(it.hasNext()){
    if(toRemove.compareTo(it.next()==0){
       it.remove();
       break;
    }
}

或使用list.removeFirstOccurrence(toRemove)

但LinkedList实现不允许复制迭代器以指向特定元素以便以后删除

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM