引入
我们学习了这么多单循环链表的知识,那么该如何运用到生活中呢?或者该如何灵活的使用这些单循环链表的知识呢?
魔术师发牌问题
大概的情景是这样得
- 13张牌
- 从1~13,A~K
- 数一张,放下是 A,把 A 放桌面上
- 数两张,第一张放到牌堆最下面,第二张放下是2 ,把2放桌面上
- 数三张,第一张、第二张放到牌堆最下面,第三张放下是3 ,把3放桌面上
以此类推,所有13张牌都发完,桌面上正好是A~K
大概思路
- 跟约瑟夫问题类似
- 移动指针,找到牌
- 删除结点,重新构成链表
- 再次移动指针,找到出牌顺序
- 赋值 A~K,顺序输出即可
代码
1 |
|
代码大概思路
- 利用约瑟夫问题的逻辑,间隔不是2人,而是 n-1,然后n++
- 这样输出得结果就是出牌得顺序
- 按照这个顺序将 A~K 赋值
- 然后按照这个输出 A~K即可
尾巴
这是我的个人学习笔记,主要是应付考研复习使用,充斥着一些吐槽和个人观点,并不严谨,欢迎大家参考、指正。