我想編寫一個PriorityList隊列,其中所有元素都是一個訂單的基礎。在我的情況下,我想訂購Type ElementType的元素(可以是任何東西,用於測試我使用整數並根據它們的值對它們進行排序,從最高值開始並以最低值結尾)PriorityList - 入隊方法錯誤
但是我處於目前在我的後續方法中發現錯誤。代碼運行,但不能按預期工作。
讓代碼添加3 3 4或3 4 5很好地工作。我得到4 3 3和5 4 3,完全按照它的樣子。 但是,如果我給隊列以下值:5 3 3 4 5 4,我得到:5 3 3; 我期望5 5 4 4 3 3; 我認爲這是可以理解的,什麼是錯誤的,但我不明白指針是否足以解決這個問題。
我會很高興,如果有人可以看看下面的代碼行,並試圖弄清楚,什麼是錯的,以及如何修復它。如有需要,我可以在第二天早上提供更多信息
public void enqueue(ElementType element) {
ListNode elem = new ListNode ((ElementType)element);
if(head == null) {
head = elem;
head.data = element;
head.next = null;
head.prev = null;
tail = head;
}
else {
ListNode n = null;
n = head;
if(element.compareTo(head.data) > 0) {
elem.prev = null;
head.prev = elem;
elem.next = head;
head.next = n.next;
head = elem; return;
}
int k = 0;
while(element.compareTo(n.data) <= 0) {
k++;
if(n.next !=null) {
n = n.next;
}
else {
elem.prev = n;
n.next = elem;
tail = elem;
elem.next = null;
return; }
}
elem.prev = n.prev;
n.prev = elem;
elem.next = n;
} }
是的,我已經實現了可比較的 然而,似乎雙鏈表不完全在做,它應該做什麼,我想知道如何解決這些指針問題。 –
Imago
@Imago,您是否還使用PriorityQueue來替換您的隊列代碼? –
wassgren
是的,我真的認爲問題在於設定的指針內.. – Imago