力扣篇章——链表

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_41904978/article/details/102173949

前往力扣
链表是一种线性结构,类似于数组,较与数组在增删方面更快,效率更高,但在查询方面效率比较低。链表通过引用字段相连接,主要有单链表和双链表两种

单链表

单链表就是将所有结点按顺序组织起来。特点是:每个节点只有一个引用字段,该引用字段指向下一个节点。
源自力扣

需要掌握的内容

  1. 单链表的创建(难度不大,但是需要充分考虑边界条件或者是特殊的状况)
  2. 自制一个单链表类,实现增删改查
  3. 学会使用双指针解决单链表的经典问题:环问题(使用双指针)、两个单链表相交(采用双指针)、反转链表(使用递归或者迭代)、移除链表元素、奇偶链表(采用双指针)、回文链表(将链表的值放入数组中进行判断)。
  4. 掌握一种以上的单链表翻转方法。

双链表

双链表以类似的方式工作,但还有一个引用字段,称为“prev”字段,该字段指向该节点的前一个节点,故名为双链表(双向链表)。
在这里插入图片描述

需要掌握的内容

  1. 添加操作——向双链表中添加一个节点(比单链表略微复杂)。
  2. 删除操作——向双向链表中删除一个节点。
  3. create 双链表——自己创建一个双链表。
  4. 扁平化多级双向链表(使用递归或者迭代解决)
  5. 双指针的使用。

链表与数组的比较

数组
  1. 在内存中占用的是一片连续的空间。
  2. 对内存的空间要求比较高(要申请一片地址连续的空间)。
  3. 内存利用率高,没有额外的内存消耗。
  4. 不能动态的更改内存大小。
  5. 数据的读取与修改非常容易。(时间复杂度为O(1))。
  6. 数据的增加和删除麻烦。(时间复杂度为O(n))
链表
  1. 在内存中占用的是一片不连续的空间。
  2. 对内存要求不高。
  3. 内存利用率较低(使用量指针指向下一个节点)。
  4. 可以动态的更改链表的大小。
  5. 数据的读取和修改麻烦(时间复杂度为O(n)).。
  6. 数据的增加和删除比较容易。(在找到节点的前提下时间复杂度为O(1))。

小结:对链表的各种操作最终仍然要转化为对指针的操作,在链表相关问题中多能用双指针问题解决(相当一部分)。同时也不要忘记将数组与链表结合起来用,最后对于一些古怪的链表可以试着将他们看成图,使用图的相关解法解决问题。

猜你喜欢

转载自blog.csdn.net/qq_41904978/article/details/102173949