链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而顺序表相应的时间复杂度分别是O(logn)和O(1)。
使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。但是链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。
链表最明显的好处就是,常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的存取往往要在不同的排列顺序中转换。链表允许插入和移除表上任意位置上的节点,但是不允许随机存取。
链表和数组的对比:
常见种链表结构:单向链表
双向链表
循环链表
块状链表
其它扩展
单向链表(单链表)-最简单,最常用
链表通过指针将一组零散的内存块串联在一起。把内存块称为链表的“结点”。
每个结点包含了两个域:一个是存储数据元素的数据域(信息域)
一一个是存储下一个结点地址的指针域
为了将所有的结点串起来,每个链表的结点除了存储数据之外