在 java 引用中使用 LinkedList 的堆栈实现无法正常工作
Stack implementation using LinkedList in java references not working properly
每次在此堆栈上调用推送操作时,都会创建新节点,但堆栈只会变为空。
请帮我解决我的代码有什么问题。
我弄乱了参考变量。当从 main 方法调用推送操作时,top 每次都为空。我不知道为什么会这样。
导入 java.util.EmptyStackException;
public class LinkedListImplStack {
public LinkedListImplStack() {
this.top = null;
}
//Node
private static class Node<T> {
T data;
Node next;
public Node(T data) {
this.data = data;
this.next = null;
}
}
// maintain top
private Node top;
//push()
public void push(T data) {
Node<T> node = new Node(data);
node.next = top;
top = node;
}
//pop()
public T pop() {
if(top == null)
throw new EmptyStackException();
T toBePopped = (T) top.data;
top = top.next;
return toBePopped;
}
//peek()
public T peek() {
if(top == null)
throw new EmptyStackException();
return (T) top.data;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
while(top!=null) {
s.append(top.data + " -> ");
top = top.next;
}
return s.toString();
}
public static void main(String[] args) {
LinkedListImplStack myStack = new LinkedListImplStack();
myStack.push(1);
myStack.push(2);
myStack.push(3);
System.out.println(myStack);
myStack.pop();
System.out.println(myStack);
myStack.push("four");
System.out.println(myStack);
System.out.println(myStack.peek());
}
}
public String toString() {
StringBuilder s = new StringBuilder();
while(top!=null) {
s.append(top.data + " -> ");
top = top.next;
}
return s.toString();
}
调用toString()
时,将成员变量top
指针移动到栈尾,有效null
入栈;复制 top
并对其进行迭代以解决您的问题。
在intellij中,有一个对象的enable toString()视图属性,如果我们禁用它,那么只有在我们调用它时才会调用toString()。
否则,每次调用 stack.push() 之类的方法时都会调用 toString() ,由于我的 toString() 方法实施不正确,这会使我的堆栈为空。
第一个回答有助于理解
每次在此堆栈上调用推送操作时,都会创建新节点,但堆栈只会变为空。 请帮我解决我的代码有什么问题。 我弄乱了参考变量。当从 main 方法调用推送操作时,top 每次都为空。我不知道为什么会这样。 导入 java.util.EmptyStackException;
public class LinkedListImplStack {
public LinkedListImplStack() {
this.top = null;
}
//Node
private static class Node<T> {
T data;
Node next;
public Node(T data) {
this.data = data;
this.next = null;
}
}
// maintain top
private Node top;
//push()
public void push(T data) {
Node<T> node = new Node(data);
node.next = top;
top = node;
}
//pop()
public T pop() {
if(top == null)
throw new EmptyStackException();
T toBePopped = (T) top.data;
top = top.next;
return toBePopped;
}
//peek()
public T peek() {
if(top == null)
throw new EmptyStackException();
return (T) top.data;
}
@Override
public String toString() {
StringBuilder s = new StringBuilder();
while(top!=null) {
s.append(top.data + " -> ");
top = top.next;
}
return s.toString();
}
public static void main(String[] args) {
LinkedListImplStack myStack = new LinkedListImplStack();
myStack.push(1);
myStack.push(2);
myStack.push(3);
System.out.println(myStack);
myStack.pop();
System.out.println(myStack);
myStack.push("four");
System.out.println(myStack);
System.out.println(myStack.peek());
}
}
public String toString() {
StringBuilder s = new StringBuilder();
while(top!=null) {
s.append(top.data + " -> ");
top = top.next;
}
return s.toString();
}
调用toString()
时,将成员变量top
指针移动到栈尾,有效null
入栈;复制 top
并对其进行迭代以解决您的问题。
在intellij中,有一个对象的enable toString()视图属性,如果我们禁用它,那么只有在我们调用它时才会调用toString()。 否则,每次调用 stack.push() 之类的方法时都会调用 toString() ,由于我的 toString() 方法实施不正确,这会使我的堆栈为空。
第一个回答有助于理解