链表一般场景下是无界链表,下面的算法也是无界链表。
public class QueueNode{
/** 头节点 **/
private Node head;
/** 未节点 **/
private Node tail;
/** 临时节点,可不要。为了好理解 **/
private Node tempNode;
public QueueNode(){
/** 增加哨兵节点,好处理 **/
head = new Node();
}
/** 进入队列 **/
public Boolean enqueue(String element){
if(head == null){
/** 此时还没有队列 **/
head = new Node();
}
tempNode = new Node();
tempMode.setData(element);
if (head.next == null) {
/** 此时队列无内容 **/
tail = tempNode;
head.next = tail;
tempNode = null;
return true;
}
tail.next = tempNode;
tail = tempNode;
tempNode = null;
return true;
}
/** 出队列 **/
public String dequeue(){
if(head == null || head.next == null){
return null;
}
Node node = head.next;
String element = node.getData();
/** 删除第一个真实节点 **/
head,next == head.next.next;
return element;
}
/** 链表结构 **/
@Data
class Node{
private String data;
private Node next;
}
}
测试代码:
static void checkQueueNode(){
QueueNode queueNode = new QueueNode();
queueNode.enqueue("tom");
queueNode.enqueue("mic");
queueNode.enqueue("sunny");
queueNode.enqueue("perry");
System.out.println(queueNode);
Assert.check("tom".equals(queueNode.dequeue()), "tom问题");
Assert.check("mic".equals(queueNode.dequeue()), "mic问题");
Assert.check("sunny".equals(queueNode.dequeue()), "sunny问题");
System.out.println(queueNode);
queueNode.enqueue("lisha");
System.out.println(queueNode);
}