gpt4 book ai didi

java - 如何在Java中为自定义堆栈类编写打印函数?

转载 作者:行者123 更新时间:2023-12-02 12:38:51 24 4
gpt4 key购买 nike

我想编写自己的堆栈类,这是我到目前为止所写的:

 public class Stack {

private static class Node {
private int data;
private Node next;

Node(int data) {
this.data = data;
}
}

Node top;

public void push(int data) {
Node node = new Node(data);
if (top == null) {
top = node;
node.next = null;
System.out.println(node);
}
node.next = top;
top = node;
}

public void print() {...} // Help in completing this

}

我编写了其他函数,例如 peek 和 pop。但我需要帮助编写一个 print 函数,该函数将打印堆栈的元素而不删除它们。

这是我尝试过的:

public void print() {
Node node = top;
while(node.next != null) {
System.out.print(node.data + " ");
node = node.next;
}
}

但是我陷入了无限循环。它正在打印所有元素,但最后一个元素正在无限打印。而且我还认为打印函数 Node node = top; 的第一行会产生一些问题,不是吗?我认为这与引用有一定关系。 topnode 指的是相同的内存位置,对吗?请告诉我这会产生问题吗?还是正确的?

最佳答案

print中的代码是错误的。最后两个语句应该位于 else block 中。有两种情况,top 已设置,以及未设置。如果两种情况一起运行,那么它们会在列表中创建一个循环,当您尝试打印堆栈时,这将创建一个无限循环。

这个:

Node node = new Node(data);

创建一个新节点并将node指向该节点。如果 top 为 null,则:

if (top == null) {
top = node;
node.next = null;
}

设置top指向该节点,因此nodetop指向同一个节点。

然后:

node.next = top;

设置此节点上的 next 指向自身,因为 nodetop 是相同的。

关于java - 如何在Java中为自定义堆栈类编写打印函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45036125/

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