包含使用链表的堆栈的回文不能返回正确的答案

时间:2019-05-29 15:28:16

标签: java

我一直在通过使用链表实现Stack。实现如下:

public class Node {
    public Object e;
    Node next;
    public Node(Object e){
        this.e=e;
    }
}

public class Stack {
    Nodo last, first;
    int count;
    public void push(Object n){
        Nodo temp=new Nodo(n);
        temp.next=last;
        last=temp;
        if (first==null){
            first=temp;
        }
        count++;
    }
    public boolean isEmpty(){
        if (count==0) return true;
        else return false;
    }
    public Object pop(){
        Object obj=null;
        if (isEmpty()){
            return -1;
        }
        else{
            obj=last.e;
            last=last.next;
        }
        count--;
        return obj;
    }
    public void print(){
        Nodo current=last;
        while (current!=null){
            System.out.println(current.e);
            current=current.next;
        }
    }
public boolean palindrome(){
        Stack cadT1=new Stack();
        Stack cadT2=new Stack();
        cadT1=this;
        //System.out.println(this.isEmpty());
        while (this.isEmpty()!=true){
            cadT2.push(this.pop());
        }
        cadT1.print();
        while (cadT1.isEmpty()!=true){
            /*if (!(cadT1.pop().equals(cadT2.pop()))){
                return false;
            }*/
            System.out.println(cadT1.pop()+" "+cadT2.pop());
        }
        return true;
    }

我对回文功能的实现有疑问,在其中我也使用了堆栈。我的问题是它总是返回true的值。我已注释了当前无法正常工作的代码部分。在分析我的代码时,我发现当我执行以下任务时:

cadT1=this;

cadT1变量仍然为空。我已经通过在回文功能的同时放置以下行来测试这一点:

System.out.println(cadT1.pop()+" "+cadT2.pop());

我已经看到我的代码没有执行该行,这是因为while循环中的条件:

while (cadT1.isEmpty()!=true){

始终设置为false。 我的主类中正在运行的代码如下:

 Stack word=new Stack();
    word.push('a');
    word.push('s');
    word.push('d');
    word.push('f');
    System.out.println(word.palindrome());

我在做什么错?谢谢

1 个答案:

答案 0 :(得分:1)

这是因为您已经用此弹出了当前堆栈中的所有元素

cadT2.push(this.pop());

现在,当您调用cadT1.print()时,它将不会打印任何内容(cadT1是对当前堆栈的引用)。因此,cadT1.isEmpty()是正确的。

您可以做的是迭代链接列表并构建第二个堆栈,而不是从当前堆栈中弹出元素以构建第二个堆栈(如果弹出,则当前堆栈中没有任何要比较的元素反对)。