gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:54 24 4
gpt4 key购买 nike

我正在研究堆栈的链表实现,似乎只有一个错误就能满足我的需求。我正在插入 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/

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