Палиндром со стеком с использованием связанных списков не возвращает правильный ответ

Я реализую стек, используя связанный список. Реализация следующая:

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());

Что я делаю неправильно? Спасибо

рассмотрите возможность реализации метода peek() и используйте его в журналах

Shark 29.05.2019 17:42
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это потому, что вы уже извлекли все элементы из текущего стека с помощью этого

cadT2.push(this.pop());

Теперь, когда вы вызываете cadT1.print(), он ничего не печатает (cadT1 — это ссылка на текущий стек). Следовательно, cadT1.isEmpty() будет правдой.

Что вы можете сделать, так это повторить связанный список и построить второй стек, а не извлекать элементы из текущего стека для построения второго стека (если вы выталкиваете, у вас не будет никаких элементов в текущем стеке для сравнения).

Другие вопросы по теме