Java链表栈(支持泛型和迭代)

自己写个支持泛型与迭代的链表栈,先定义好接口,如下:

代码如下:

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;
	}
		
	}
	
}

猜你喜欢

转载自blog.csdn.net/illikang/article/details/81336058