链表(Linked list)是一种常见的基础数据结构,是一种线性表,但并不会按线性的顺序存储数据,而是在一个节点里存储下一个节点的指针。由于无需顺序存储,链表在插入时复杂度可以达到O(1)
,比顺序表快很多,但是查找一个节点或访问特定编号的节点需O(n)
的时间,而顺序表相应的时间复杂度分别是O(logn)
和O(1)
。
内容涉及以下这些方面:
- 链表分类
- 节点 Node
- 创建链表 LinkedList
- 向链表添加节点
- push 操作
- append 操作
- insert(after:) 操作
- 时间复杂度
- 移除链表的节点
- pop 操作
- removeLast 操作
- remove(after:) 操作
- 时间复杂度
- 值语义和写时拷贝
- 优化 COW
- isKnownUniquelyReferenced
- 共享节点
- 开启 COW 时移除节点会产生错误
- 链表相关算法题
- 逆序打印链表节点
- 查找链表的中间节点
- 反转链表
- 合并两个有序链表
- 删除链表中等于给定值的所有节点
详细介绍查看下面文章:
https://github.com/pro648/tips/blob/master/sources/链表%20LinkedList.md