链表是一种随机存储在内存中的节点的对象集。节点包括两个字段,即存储在该地址的数据和包含下一节点地址的指针。链表的最后一个节点包含指向null的指针。
1.链表的用途
- 链表不需要连续存在于存储器中。节点可以是存储器中任何位置并链接在一起以形成链表。实现了对空间的优化利用。
- 链表大小仅限于内存大小,不需要提前声明。
- 空节点不能出现在链表中。
- 在单链表中存储基元类型或对象的值。
2.为什么链表比数组有优势?
数组的限制:
- 在程序中使用数组之前,必须事先知道数组的大小。
- 增加数组的大小是一个耗时的过程。在运行时几乎不可能扩展数组大小。
- 数组中所有元素都需要连续存储在内存中。在数组中插入任何元素都要移动元素之前所有的数据。
链表可以克服数组所有的限制。
- 动态分配内存。链表的所有节点但是非连续存储在存储器中,并使用指针链接在一起。
- 大小调整不再是问题,因为不需要在声明定义时定义大小。链表根据程序需求增长,并且仅限于可用的内存空间。
3.单链表或单向链
链表是有序元素集的集合。元素的数量可以根据程序的需要而变化。单链表中的节点由两个部分组成:数据部分和链接部分。节点的数据部分存储将由节点表示的实际信息,而节点的链接部分存储其直接后继的地址。
单向链表可以仅在一个方向上遍历。
时间复杂度
4.单链表上的操作
- 创建节点
- 插入节点(表头,表中,表尾)
- 删除节点(表头,表中,表尾)
- 遍历节点
- 搜索