/**
* @Author Mr.wei
* @Date 2019/7/31 8:58
* @Description:使用链表实现下压栈,在这样的实现中永远都只操作表头
*/
public class Stack<T> implements Iterable<T> {
/**
* 指向链表第一个节点
*/
private Node first;
/**
* 记录链表的长度
*/
private int length;
/**
* 节点
*/
private class Node {
T item;
Node next;
}
/**
* 迭代器
*/
private class StackIterator implements Iterator<T> {
private Node iterNode = first;
@Override
public boolean hasNext() {
return iterNode != null ? true : false;
}
@Override
public T next() {
T item = iterNode.item;
iterNode = iterNode.next;
return item;
}
}
public int getLength() {
return this.length;
}
/**
* 入栈
* @param item
*/
public void push(T item) {
Node newNode = new Node();
newNode.item = item;
Node oldNode = first;
newNode.next = oldNode;
first = newNode;
length++;
}
/**
* 出栈
* @return
*/
public T pop() {
Node popNode = first;
first = first.next;
length--;
return popNode.item;
}
public int size() {
return this.length;
}
public boolean isEmpty() {
return length == 0 ? true : false;
}
@Override
public Iterator<T> iterator() {
return new StackIterator();
}
}