本文接上一篇队列文章
四、链表结构的队列
1.带尾指针的链表
- 根据链表结构的特性,在队首插入和删除节点比较容易,时间复杂度为
o(1),但是在链表尾部插入和删除,都需要先找到链表尾部前一个节点的位置,这是需要遍历整个链表的,对应的时间复杂度为o(n); - 因此根据单链表的特性,在链表中添加一个
tail节点,用于指向下一个节点即将插入的位置,如下图所示:

- 此时便拥有了带尾指针的链表,而且对链表尾部进行插入比较方便(
O(1)),但删除比较难(O(n),因为需要找到tail前一个节点的位置),而对链表的头部进行插入和删除依然是很容易(O(1))。 - 队列的数据结构为:先进先出(一端进元素,另一端出元素),同时结合带尾指针链表的特性,可以从
head端删除元素,tail端插入元素,如下图所示:

此时由于没有dummyHead虚拟节点,要注意链表为空的情况。
2.链表实现队列
实现代码:
package dataStructure.chapter4;
import dataStructure.chapter3.Queue;
/**
* @Author: zjtMeng
* @Date: 2020/1/5 20:48
* @Version 1.0
*/
public class LinkedListQueue<E> implements Queue<E> {
private class Node{
public E e;
public Node next;
public Node(E e, Node next){
this.e = e;
this.next = next;
}
public Node(E e){
this(e,null);
}
public Node(){
this(null, null);
}
@Override
public String toString(){
return e.toString();
}
}
//定义头结点和尾节点
private Node head, tail;
private int size;
//默认构造方法
public LinkedListQueue(
本文详细介绍了如何使用带尾指针的链表来实现队列,重点讨论了链表结构在队列操作中的优势,包括在链表尾部的插入操作。同时对比了普通队列、循环队列和链表队列的性能,指出链表队列在特定操作上的高效性,但指出了删除操作的挑战。
最低0.47元/天 解锁文章
&spm=1001.2101.3001.5002&articleId=103843657&d=1&t=3&u=56b98f6a4009474d8f0e03b4539bda1d)
8699

被折叠的 条评论
为什么被折叠?



