/**
* 链表实现队列
*/
public class LinkedQueue {
class Node{
int val;
Node next;
public Node(int val){this.val=val;}
public Node(int val,Node next){this.val=val;this.next=next;}
}
// 队头指针
Node front;
// 队尾指针
Node rear;
// 队列长度
int queueSize;
public LinkedQueue(){}
/**
* 入队,如果队列为空,则将头尾指针都指向这个元素,否则将队尾元素的next域设为新入队元素,再将尾指针指向新入队元素
* @param element
* @return
*/
public boolean enQueue(int element){
if(isEmpty()){
front=new Node(element,null);
rear=front;
queueSize++;
return true;
}
Node node = new Node(element,null);
rear.next=node;
rear=node;
queueSize++;
return true;
}
/**
* 出队,头指针指向它的next域,如果队列中只有一个元素,那么将尾指针也只想next域,也就是null
* @return
*/
public int deQueue(){
if(isEmpty()){
throw new RuntimeException("队列已经空了!");
}
int element=front.val;
front=front.next;
if(queueSize==1){
rear=front;
}
queueSize--;
return element;
}
public boolean isEmpty(){
return front==null && front==rear && queueSize==0;
}
}