在 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() 方法实施不正确,这会使我的堆栈为空。

第一个回答有助于理解