使用单链表实现队列。
变量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来存储我要去的项的值,remove...My问题是从列表中删除最后一个节点。我不确定如何在不得到空指针异常的情况下这样做。任何意见都将非常感谢!
发布于 2020-02-28 04:55:56
当您在最后一个节点时,会触发if
条件,在这种情况下,您希望保存该节点的值并将其从列表中删除。您正在保存该值,但是为什么要将back.net设置为null呢?您不想将前一个tmp节点的next设置为null吗?将back.next设置为null不会影响整个列表吗?
对于第一个评论我很抱歉,这家伙显然没有读到你的问题。StackOverflow,是吧?
https://stackoverflow.com/questions/60441432
复制相似问题