如何从java中删除链表中的最大元素?我知道我可以使用get()或remove()函数来检索/删除元素。但我想让它变得高效。我想使用迭代器。你知道我怎么做吗?请注意,我不想创建自己的链表。我甚至不想对我的链表进行排序。
我可以对此进行线性搜索吗?如果是这样,我如何跟踪指向最大元素的指针(或迭代器)。任何帮助将不胜感激。
答案 0 :(得分:2)
链接列表(除非已排序)不是您在此处尝试执行的最佳结构,因为除了执行线性搜索并删除最大元素之外没有其他选项
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();
答案 1 :(得分:0)
如果你知道最大元素是什么,你就可以这样做
Iterator<Integer> it = list.iterator();
Integer toRemove;
while(it.hasNext()){
if(toRemove.compareTo(it.next()==0){
it.remove();
break;
}
}
或使用list.removeFirstOccurrence(toRemove)
但LinkedList实现不允许复制迭代器以指向特定元素以便以后删除