自己写个支持泛型与迭代的链表栈,先定义好接口,如下:
代码如下:
import java.util.Iterator;
public class LinkedListStack<T> implements Iterable<T> {
Node head; //栈头
int length; //链长度
//定义子类节点,包含有参合无参两种构造方法
public class Node{
T item;
Node next;
public Node(){}; //节点的无参构造方法
Node(T item){ //节点的有参构造方法
this.item=item;
}
}
//链表的构造方法,栈头无数据
public LinkedListStack(){
head=new Node();
}
//返回栈长度
public int length() {
return length;
}
public boolean isEmpty() {
return length==0;
}
//压栈
public void push(T item) {
Node newNode= new Node(item);
newNode.next=head.next;
head.next=newNode;
length++;
}
//弹栈
public T pop() {
if(this.isEmpty()) {
System.out.println("栈为空,无法弹出元素");
return null;
}
else {
T returnItem=head.next.item;
head.next=head.next.next;
length--;
return returnItem;
}
}
public T getTop() {
if(this.isEmpty()) {
System.out.println("栈为空,无法弹出元素");
return null;
}
else {
T returnItem=head.next.item;
return returnItem;
}
}
//重写迭代接口的方法
@Override
public Iterator<T> iterator() {
// TODO Auto-generated method stub
return new StackIterator();
}
private class StackIterator implements Iterator<T>{
@Override
public boolean hasNext() {
return length>0;
}
@Override
//迭代器next()方法实现
public T next() {
Node newhead=head;
head=head.next;
length--;
return newhead.next.item;
}
}
}