使用单链表实现队列。
变量back“指向”链接列表中的第一个节点。在后面添加(排队)新元素。
变量front“指向”链接列表中的最后一个节点。从前面删除(出队)元素。
此实现与通常的队列相反,在常规队列中,后面是最后一个节点,而前面是第一个节点。我知道这不是实现队列的好方法,但这是对链接列表进行编码的好习惯。
我已经编写了enqueue()函数,但是不确定我对dequeue()做错了什么。我必须走到最前面,这是最后一个节点,以使其出队。因此,我必须遍历Node才能删除并返回队列前面的项目。
//Node stuff
private Node front, back;
static class Node {
public Node (char item, Node next) { this.item = item; this.next = next; }
public char item;
public Node next;
}
出队功能:需要工作
public char dequeue() {
char item;
if (back.item == front.item) {
item = front.item;
back = null;
}
for (Node tmp = back; tmp != null; tmp= tmp.next){
if (tmp.next == null){
item = tmp.item;
back.next = null;
}
}
return item;
}
我创建了一个char来存储要删除的项目的值...我的问题是从列表中删除最后一个节点。我不确定如何在没有Null Pointer异常的情况下进行操作。
任何输入将不胜感激!
最佳答案
当您位于最后一个节点时,会触发if
条件,在这种情况下,您想保存该节点的值并将其从列表中删除。您正在保存值,但是为什么要将back.net设置为null?您是否要将上一个tmp节点的下一个设置为null?是否将back.next设置为null会切断整个列表?
抱歉,我的第一句话是,伙计显然没有读过您的问题。 StackOverflow,对吗?