版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
前往力扣
链表是一种线性结构,类似于数组,较与数组在增删方面更快,效率更高,但在查询方面效率比较低。链表通过引用字段相连接,主要有单链表和双链表两种
单链表
单链表就是将所有结点按顺序组织起来。特点是:每个节点只有一个引用字段,该引用字段指向下一个节点。
需要掌握的内容
- 单链表的创建(难度不大,但是需要充分考虑边界条件或者是特殊的状况)
- 自制一个单链表类,实现增删改查
- 学会使用双指针解决单链表的经典问题:环问题(使用双指针)、两个单链表相交(采用双指针)、反转链表(使用递归或者迭代)、移除链表元素、奇偶链表(采用双指针)、回文链表(将链表的值放入数组中进行判断)。
- 掌握一种以上的单链表翻转方法。
双链表
双链表以类似的方式工作,但还有一个引用字段,称为“prev”字段,该字段指向该节点的前一个节点,故名为双链表(双向链表)。
需要掌握的内容
- 添加操作——向双链表中添加一个节点(比单链表略微复杂)。
- 删除操作——向双向链表中删除一个节点。
- create 双链表——自己创建一个双链表。
- 扁平化多级双向链表(使用递归或者迭代解决)
- 双指针的使用。
链表与数组的比较
数组
- 在内存中占用的是一片连续的空间。
- 对内存的空间要求比较高(要申请一片地址连续的空间)。
- 内存利用率高,没有额外的内存消耗。
- 不能动态的更改内存大小。
- 数据的读取与修改非常容易。(时间复杂度为O(1))。
- 数据的增加和删除麻烦。(时间复杂度为O(n))
链表
- 在内存中占用的是一片不连续的空间。
- 对内存要求不高。
- 内存利用率较低(使用量指针指向下一个节点)。
- 可以动态的更改链表的大小。
- 数据的读取和修改麻烦(时间复杂度为O(n)).。
- 数据的增加和删除比较容易。(在找到节点的前提下时间复杂度为O(1))。
小结:对链表的各种操作最终仍然要转化为对指针的操作,在链表相关问题中多能用双指针问题解决(相当一部分)。同时也不要忘记将数组与链表结合起来用,最后对于一些古怪的链表可以试着将他们看成图,使用图的相关解法解决问题。