我开始创建变量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