package com.ncst.queue;
/**
* @author i
* @create 2019/12/20 16:10
* @Description 基于链表实现队列
*/
public class QueueBaseOnLikedList {
private Node head;//头结点
private Node tail;//尾结点
//入队
public void requeue(String value){
//如果head节点为空 说明 没有数据
if (head == null){
head = new Node(value,null);
tail = head;
return;
}
//新结点指向tail节点的next节点 然后在将tail移动(赋值)到最后一个新结点上
tail.next = new Node(value,null);
tail = tail.next;
}
//出队
public String dequeue(){
//如果队列为空
if (head == null){
return null;
}
String value = head.data;
head = head.next;
return value;
}
//打印所有数据
public void printfAll(){
if (head == null){
throw new NullPointerException("queue is empty!");
}
Node cur = head;
while (cur!=null){
System.out.print(cur.data+"\t");
cur = cur.next;
}
}
public static void main(String[] args) {
QueueBaseOnLikedList queue = new QueueBaseOnLikedList();
queue.requeue("1");
queue.requeue("2");
queue.requeue("3");
queue.requeue("4");
queue.requeue("5");
queue.printfAll();
//queue.printfAll();
System.out.println(queue.dequeue());
System.out.println(queue.dequeue());
}
private static class Node{
private String data;//存储数据
private Node next;//下一个结点
public Node(String data, Node next) {
this.data = data;
this.next = next;
}
public Node getNext() {
return next;
}
}
}