У меня возникли проблемы, реализующей stack
через single linked list
:Реализация стека через единый связанный список
Вот интерфейс я уверен, реализации:
public interface Stack<E> {
/**
* element at the top without removing it
*/
public E peek();
/**
* pop from the stack
*/
public void pop();
/**
* insert into the stack
*/
public void push(E e);
/**
* isEmpty
*/
public boolean isEmpty();
/**
* size
*/
public int size();
/**
* reverse
*/
public Stack<E> reverse();
}
и вот моя реализация:
public class ListStack<E> implements Stack<E> {
private static class Node<T> {
private T item;
private Node<T> next;
private Node(T item, Node<T> next) {
this.item = item;
this.next = next;
}
}
private Node<E> first;
private int size;
public ListStack() {
this.size = 0;
this.first = null;
}
@Override
public E peek() {
return first.item;
}
@Override
public void pop() {
first = first.next;
size--;
}
@Override
public void push(E e) {
Node<E> node = new Node<E>(e, first);
first = node;
size++;
}
@Override
public boolean isEmpty() {
return (first == null);
}
@Override
public int size() {
return size;
}
@Override
public Stack<E> reverse() {
}
}
Я борюсь с методом reverse
, и я не уверен, что я программирую это право.
Любая помощь была бы принята с благодарностью!
Не могли бы вы привести пример ввода и неисправный выход вместе с желаемым выходом? Или объяснение того, как обратный метод закручивается. –
@ JonnyHenly на самом деле я просто заметил, что для любого типа вставленных данных стек всегда равен нулю, так что, возможно, что-то там не так, я просто не знаю, где – laker001
взгляните на ваш метод pop, если он не установил временную переменную, чтобы удерживать E, а затем установить сначала равную следующей, а затем вернуть временную E? –