[英]Removing min from LinkedList
我想從此列表中刪除3,但不確定從哪里開始。 我將一個數字序列存儲在實現鏈接列表的Priority Queue中,並嘗試使用removeMin
方法查找最小值並將其從優先級隊列中刪除
import java.util.Iterator;
import java.util.LinkedList;
public class Test {
static LinkedList<Integer> list = new LinkedList<Integer>();
public static void main(String[] args) {
list.add(10);
list.add(4);
list.add(12);
list.add(3);
list.add(7);
System.out.println(removeMin());
}
public static Integer removeMin() {
LinkedList<Integer> pq = new LinkedList<Integer>();
Iterator it = pq.iterator();
for (int i = 0; i < list.size(); i++) {
pq.add(list.remove());
}
int min = pq.get(0);
while (it.hasNext()) {
// help here
}
return pq.remove();
}
嘗試這個:
解決方案1
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(10);
list.add(4);
list.add(12);
list.add(3);
list.add(7);
Collections.sort(list);
list.removeFirst();
list.forEach(System.out::println);
解決方案2:
LinkedList<Integer> list = new LinkedList<Integer>();
list.add(10);
list.add(4);
list.add(12);
list.add(3);
list.add(7);
int min=Integer.MAX_VALUE;
int pos=0;
int remPos=0;
Iterator<Integer> iterator = list.iterator();
while(iterator.hasNext()){
Integer element = iterator.next();
if(element<min){
min=element;
remPos=pos;
}
pos++;
}
list.remove(remPos);
list.forEach(System.out::println);
在一行代碼中實現此目標的一種簡單方法是使用Collections
類:
list.remove(Collections.min(list));
System.out.println(list); // to test
這個如何運作?
list.remove(Object o)
:從列表中刪除第一次出現的指定元素(如果存在)。 如果此列表不包含該元素,則它保持不變。 Collections.min(Collection<? extends T> coll)
:根據給定集合的最小順序,返回其最小元素。 此外,如果集合中的最小值超過一個,則可以執行以下操作:
final Integer min = Collections.min(list);
while(list.contains(min)){ // to remove all min value occurrences in list
list.remove(min);
}
System.out.println(list); // to test
該代碼有一些錯誤。
for (int i = 0; i < list.size(); i++) {
pq.add(list.remove());
}
在pq
中復制列表時,您使用的是list.size()
但您還會在循環中刪除列表的元素。 因此,由於size
會減小,因此不會復制所有元素。
另外,您沒有實現priority queue
,而只是list
的副本。 為了創建priority queue
您必須按順序插入元素。 然后, min element
將位於隊列的top
(top是列表的第一個元素)。
執行此操作時,可以執行pq.remove()
來刪除min element
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.