gpt4 book ai didi

java - 我的队列作为列表的实现有什么问题?

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:50 26 4
gpt4 key购买 nike

我首先创建队列的变量 headtail,当然它们本身就是列表的元素,然后我通过编写 head = tail = null 在构造函数中创建一个空列表。在 enq 中,我创建了一个名为 help 的列表新元素,它应该保存我想要放在列表末尾的新元素(因为它是一个队列)。当然,队列的尾部始终是我们之前放入列表末尾的元素。然后我检查 head 是否为空(因为列表本身为空,或者因为我们删除了它的第一个元素,它应该始终与 head 相同),并且,如果有必要,我也将 head 定义为 help 。然后 help 应该显示列表中新的空元素。

问题如下:当我测试我的程序时,它在第一次删除后停止并告诉我列表已经为空。

我猜错误出在方法deq中。我想通过编写 head = head.next 来删除第一个元素,但是我们之前将 head 定义为 help,因此,head.nexthelp.next 相同,而 help.nextnull 相同,因此 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;
}
}

最佳答案

  public void enq(Object x) {
Entry help = new Entry();
help.content = x;
**tail = help;**

if (head == null) {
head = help;
}

help.next = null;
}

任何时候队列中始终只有一个元素。

这可以使用下面的 enq() 方法来解决

public void enq(Object x) {
Entry help = new Entry(x);

if (head == null) {

head = help;

tail = head;

} else {
if (head == tail) {

head.next = help;
tail = help;



} else {

this.tail.next = help;
this.tail = help;
}
}

}

关于java - 我的队列作为列表的实现有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41640014/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com