簡體   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