大纲图
链表的经典面试题目
如何设计一个LRU缓存淘汰算法
tip:单向链表
约瑟夫问题
N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。
举个例子: 假设N=6,M=5,被杀掉的顺序是:5,4,6,2,3,1。
现在问你最后留下的人是谁?
比如N=6,M=5 ,留下的就是1
1 2 3 4 5 6 => 6 1 2 3 4 => 6 1 2 3 =>1 2 3 => 1 3 => 1
tips: 单向循环链表
结构
相比单向链表(单向链表的tail节点next指针指向null) , 单向循环链表无非就是把尾结点的next指针重新指向head节点而已。
代码实现也相对简单,多一步操作, 思路可参考 Algorithms_基础数据结构(02)_线性表之链表_单向链表 ,这里我们直接使用单向循环链表来解决个经典的算法问题吧。
分析