链表分类
- 单向链表
- 双向链表
单向链表
- 链表中的每一个元素称为结点(Node)
- 物理存储单元上,非连续、非顺序的存储结构
- 单向链表:每个结点包括两部分:一个是存储数据元素的数据域,另一个是存储下一个结点的指针域。记录下一个结点地址的指针叫做后继指针next
单向链表时间复杂度分析
查询操作
- 只有在查询头节点的时候不需要遍历链表,时间复杂度O(1)
- 查询其他结点需要遍历链表,时间复杂度是O(n)
插入/删除操作
- 只有在添加和删除头节点的时候,不需要遍历链表,时间复杂度O(1)
- 添加或删除其他节点需要遍历链表找到对应节点后,才能完成新增或删除节点操作,时间复杂度O(n)
双向链表
- 每个节点有一个指向后一个结点next,还有一个指向前一个结点的prev
双向链表对比单向链表
- 双向链表需要额外的两个空间来存储后继结点和前驱结点地址
- 支持双向遍历
双向链表时间复杂度分析
查询操作
- 查询头结点的时间复杂度是O(1)
- 平均的查询时间复杂度是O(n)
- 给定节点找前驱节点的时间复杂度O(1)
增删操作
- 头尾节点增删的时间复杂度是O(1)
- 其他部分节点增删的时间复杂度是O(n)
- 给定节点增删的时间复杂度是O(1)