java - 链表堆栈丢失最后一个压入堆栈的项目

标签 java linked-list stack

我正在研究堆栈的链表实现,似乎只有一个错误就能满足我的需求。我正在插入 3 个字符串,但在弹出第 3 个字符串之前,我得到一个 NullPointerException。

在运行调试时,我发现这个缺失值正在从这个列表中“弹出”,但它似乎没有被计算在内......这意味着它从堆栈中丢失,没有打印到控制台,并且列表执行一个更多迭代,此时抛出 NullPointerException,因为最后一个值已经弹出。谁能告诉我如何将我的所有值打印到控制台?

这是我的 LinkedListStack 类:

public class LinkedListStack <T>{  
private LinkedListStackNode<T> top;
public T data; 

class LinkedListStackNode<T> {        
    private T data;      //LINE 8
    private LinkedListStackNode<T> next; 

    public LinkedListStackNode(T data, LinkedListStackNode<T> next) {                       
        this.data = data;            
        this.next = next;
    }
}   
public void stack(){
    top = null;
}
public boolean isEmpty(){
    return top == null;
}
public void push (T t){
    top = new LinkedListStackNode<T> (t, top);
}
public T pop (){
    if (isEmpty()){
        System.out.println("The stack is empty!");
    }
    else{
        top = top.next;
    }
    return top.data; //Line 32
}
public T peek(){
    if (isEmpty()){
        System.out.println("Stack is Empty");
    }   
    return top.data;        
}  
}

这是我的主要():

public class StacksAndQsMain {
  public static void main(String[] args) {
           ...snipped code to condense (not part of this implementation)...

    //LinkedList Implementation
    LinkedListStack<String> lls = new LinkedListStack<>();

    String s3 = "Tonight"; //this does not print but is removed from Stack
    String s4 = "We Conqure"; //prints fine
    String s5 = "Stacks"; //prints fine

    lls.push(s5);
    lls.push(s4);
    lls.push(s3);

    while (!lls.isEmpty()){

        System.out.println(lls.pop()); //LINE 32
    }
}
}

最佳答案

看来您正在弹出顶部,然后在 pop() 方法中读取新顶部的值

它应该是这样的:

public T pop (){
   if (isEmpty()){
       throw new RuntimeException("Stack is empty");
   }
   else{
       T ret = top.data;
       top = top.next;
       return ret;
   }
}

当你这样做的时候,你还不如修复你的 peek()

public T peek(){
    if (isEmpty()) {
        throw new RuntimeException("Stack is empty");
    }   
    return top.data;        
}  

关于java - 链表堆栈丢失最后一个压入堆栈的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15399849/

相关文章:

java - 删除每次迭代中的连续字符显示意外错误

java - 覆盖链表中的 equals

创建链表并打印元素?

java - Set(int index, E element)方法链表

android - Flutter 中使用 Stack 对齐容器

c++ - 如何知道返回地址在栈上的位置c/c++

java - 我想要可见按钮已将其文本从 TextView 中删除

java - URLConnection、HttpURLConnection 和 HttpsURLConnection 的区别

java - 如何使 Async 注解在 Spring Boot 中工作?

java.util.NoSuchElementException :null(in java. util.StringTokenizer)