- 在《算法4》的103页,练习1.3.29中要求
用环形链表实现Queue。环形表也是一条链表,只是没有任何节点的链接为空,且只要链表非空则last.next的值为first。只能使用一个Node类型的实例变量(last)。
- 考虑到队列的特性,入队元素一定是插在last节点之后,last节点后移。而出队元素位于last节点之后。明白这一点还需要注意当只有一个节点时,该节点既是是首节点又是尾节点,所以在构造函数中一定有
last.next = last;
。这行代码很关键,它用于记录首节点位置。
public class RecycleQueue<Item> {
//尾节点也是当前节点(current)
Node last;
//队列中元素的个数
int N;
//节点Node
private class Node<Item>{
//该节点的值
Item item;
//后节点
Node next;
public Node(Item item,Node next){
this.item = item;
this.next = next;
}
}
public RecycleQueue(Item item){
last = new Node(item,null);
//既是尾节点又是首节点,需要自己和自己建立关联
//这步很关键
//它记录了last的下一个节点(首节点)
last.next = last;
N = 1;
}
//void enqueue(Item ite