【发布时间】:2013-10-30 00:35:27
【问题描述】:
所以我要做的是使用有序链表实现一个优先级队列。我觉得我很接近,但我似乎无法解决插入函数中 while 语句中的错误。到目前为止,这是我所拥有的:
class OrderedLinkedListMaxPQ<Item> {
private class PQNode {
Object data;
PQNode next;
public PQNode(Object value) {
data = value;
next = null;
}
}
PQNode head;
public void PriorityQueue() {
this.head = null;
}
public boolean isEmpty() { return this.head == null; }
public void insert(Object item) {
PQNode prev = null;
PQNode current = this.head;
while (current != null && current.data >= item.data) {
prev = current;
current = current.next;
}
PQNode temp = new PQNode(item);
if (prev == null) {
temp.next = this.head;
this.head = temp;
} else {
temp.next = current;
prev.next = temp;
}
}
public Object delete() {
Object temp = this.head.data;
this.head = this.head.next;
return temp;
}
public static void main(String[] args) {
OrderedLinkedListMaxPQ<Integer> pq = new OrderedLinkedListMaxPQ<Integer>();
pq.insert(7);
pq.insert(6);
pq.insert(3);
pq.insert(2);
while (!pq.isEmpty())
StdOut.println(pq.delete());
}
}
【问题讨论】:
-
在第一个 insert() 上,你没有得到一个 NullPointer 吗?
-
@iluxa 如果你的意思是因为 while 条件,它应该短路并且不会击中 current.data。
-
"使用有序链表实现优先级队列。"为什么?
java.util.PriorityQueue有问题吗?这是 O(log(N))。 你的是 O(N)。 不要这样做。
标签: java linked-list queue priority-queue