gpt4 book ai didi

java - Java中通过遍历链表的方式编写dequeue()函数

转载 作者:行者123 更新时间:2023-12-01 18:12:27 25 4
gpt4 key购买 nike

队列是使用单链表实现的。

变量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;
}

我创建了一个字符来存储我要删除的项目的值...我的问题是从列表中删除最后一个节点。我不知道如何在不出现空指针异常的情况下执行此操作。任何意见将不胜感激!

最佳答案

当您位于最后一个节点时,if 条件将触发,在这种情况下,您希望保存该节点的值并将其从列表中删除。您正在保存该值,但是为什么要将 back.net 设置为 null?您不想将前一个 tmp 节点的 next 设置为 null 吗?将 back.next 设置为 null 不会切断整个列表吗?

对于第一条评论,我深表歉意,这家伙显然没有阅读你的问题。 StackOverflow,对吧?

关于java - Java中通过遍历链表的方式编写dequeue()函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60441432/

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