我開始創建變量head
和隊列的tail
,這當然是他們自己的列表的元素,我寫head = tail = null
創建在構造一個空列表。在enq
,我創建一個名爲help
列表中的新元素,它應該保存,我想在列表的末尾把(因爲它是一個隊列)的新元素。當然,隊列中的tail
始終是我們之前放在列表末尾的元素。然後我檢查head
是否爲空(因爲列表本身就是空的,或者是因爲我們刪除了它的第一個元素,它應該始終與head
相同),並且,如果必要的話,我定義爲head
太help
。然後help
應該顯示給列表的一個新的空元素。將我的隊列實現爲列表有什麼問題?
的問題是:當我測試程序,它停止後的第一個刪除,並告訴我,該名單已經是空的。
我猜的錯誤在於方法deq
內。我想通過寫head = head.next
刪除第一個元素,但我們定義head
爲help
之前,因此,head.next
是等同採用help.next
,這與null
相同的,所以 - 方法返回一個列表是空的,它停止PROGRAMM的boolean
。
我可能要改變的help.next
的「方向」,但我看不出如何。如何使整個事情工作?
創建列表的元素:
public class Entry {
Object content;
Entry next;
}
清單的執行情況:
public class QueueList implements List {
private Entry head;
private Entry tail;
public QueueList() {
head = tail = null;
}
public boolean empty() {
return head == null;
}
public void enq(Object x) {
Entry help = new Entry();
help.content = x;
tail = help;
if (head == null) {
head = help;
}
help.next = null;
}
public Object front() {
return head.content;
}
public void deq() {
head = head.next;
}
}
抽獎得到解決,在一張紙上,你在你的ENQ方法的每一步在做什麼(例如),當調用它兩次連續。對其他方法做同樣的事情。 –
你從來沒有將'Entry'對象的'next'值設置爲其他任何值,而是null。所以當然'head = head.next;'會使你的頭爲空。只要看看你的代碼,看看你在哪裏修改'next'屬性。 –
我的猜測是,我簡單地覆蓋各'我打電話了ENQ法時間tail'。 – Borol