使用链表实现队列

链表一般场景下是无界链表,下面的算法也是无界链表。

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);
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值