3

私は Stack の Linked List の実装に取り​​組んでおり、エラーが 1 つだけで必要なものがあるようです。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;        
}  
}

これが私の Main() です:

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
    }
}
}
4

1 に答える 1

4

トップをポップしてから、 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;        
}  
于 2013-03-14T02:03:56.717 に答える