通过单链表实现栈
Implementing a stack through a single linked list
我在通过 single linked list
实现 stack
时遇到问题:
这是我正在实现的界面:
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
方法,我不确定我的编程是否正确。
如有任何帮助,我们将不胜感激!
要反转现有堆栈,您只需遵循现有堆栈的 Node.next 引用,并沿途将项目推入新堆栈。
@Override
public Stack<E> reverse()
{
ListStack<E> reversed = new ListStack<E>();
Node<E> node = first;
while(node != null)
{
reversed.push(node.item);
node = node.next;
}
return reversed;
}
我在通过 single linked list
实现 stack
时遇到问题:
这是我正在实现的界面:
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
方法,我不确定我的编程是否正确。
如有任何帮助,我们将不胜感激!
要反转现有堆栈,您只需遵循现有堆栈的 Node.next 引用,并沿途将项目推入新堆栈。
@Override
public Stack<E> reverse()
{
ListStack<E> reversed = new ListStack<E>();
Node<E> node = first;
while(node != null)
{
reversed.push(node.item);
node = node.next;
}
return reversed;
}