链表概念:链表是一种在物理上非连续、非顺序的数据结构,由若干节点索组成。
链表中数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每个节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个节点地址的指针域。双向链表会多一个指向上一个节点的指针域。
链表分类:单向链表、双向链表、循环链表。
单链表
单链表的每一个节点包含两部分,一部分是存放数据的变量data,另一部分是指向下一节点的指针next
双链表
双链表的每一个节点除了拥有data和next指针,还拥有指向前置节点的prev指针。
循环链表
链表的尾节点指向头节点形成一个环,成为循环链表。
链表的存储原理:随机存储。
链表的每一个节点分布在内存的不同位置,依靠next指针关联起来。这样可以灵活有效地利用零散的碎片空间。
链表的第一个节点被称为头节点,没有任何节点的next指针指向它,或者说它的前置节点为空,头节点用来记录链表的基地址。有了它,我们可以遍历得到整条链表。
链表的最后1个节点被称为尾节点,它指向的next为空。
操作
查找:慢,从头部开始遍历查找
更新:慢,因为先要查找再插入
插入:快
删除:快
时间复杂度
查找节点:O(n)
更新节点:O(1),不包含查询时间
插入节点:O(1)
删除节点:O(1)
优点:插入、删除、更新效率高,省空间。
缺点 :查询效率较低,不能随机访问。
应用:链表的应用也非常广泛,比如树、图、Redis的列表、LRE算法实现、消息队列等