Al算法课
链表
基础知识
单向链表
1.链表中的每个节点至少包含两个部分,数据域和指针域
2. 链表中的每个节点,通过指针域的值,形成一个线性结构
3. 查找节点O(n), 插入节点Q(1), 删除节点Q(1)
4. 不适合快速的定位数据,适合动态的插入和删除数据的应用场景
链表先构造然后进行数据的操作。
LRU 缓存算法:
第一种算法: 把数据存储到链表中。
链表刷题
1. 环状链表的操作
思路一:
(1).总结起来就是:我们只需要遍历这个链表,在遍历的过程中记录我们遍历过的节点。
(2)如果遇到next 节点为null 节点,说明没环。
(3) 如果遇到我们以前遍历的节点,说明有环。
思路二: 快慢指针
快指针:一个每次走两步,慢指针每次走一步。
leetcode 找到环的起点位置
找环的起始位置:
把相遇的节点 :
快慢指针走过a + b 的距离,快慢指针走过a + n (b + c) 的距离.
由于快指针是慢指针的二倍,所以:2(a + b) = a + n (b+ c ) + b
而我们实际上并不用关心n 是多少, 有可能是10, 也有可能是1,因此上述公式可以简化为 a =c
快乐数思路: 需要用到链表判环的思路
唯一指向性 是链表最显著的特征 、
链表反转的面试题
思路一: 设置 三个变量
思路二: 基于递归的方式实现 【递归的回溯过程】
链表的区间反转
设计一个虚拟头节点
虚拟头节点的作用方便操作。
旋转链表
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/77130.html