面试题1:约瑟夫环

约瑟夫环故事背景:
著名犹太历史学家 Josephus有过以下的故事:
在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,
39个犹太人决定宁愿死也不要被敌人抓到,
于是决定了一个自杀方式,41个人排成一个圆圈,
由第1个人开始报数,每报数到第3人该人就必须自杀,
然后再由下一个重新报数,直到所有人都自杀身亡为止。
然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,
他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

问题:怎样确定16和31的位置

解题思路:

从开始位置遍历,当指针到报数为三的位置上时,将第三个位置的节点删除,然后继续循环删除,直到当前节点(指针指向的节点)的后一个节点的next是当前节点时,即留下两个元素。

如图所示:

pLinkNode JoseCycle(pList *pHead, int num)
{assert(pHead);pLinkNode cur = *pHead;pLinkNode del = NULL;int count = 0;while (1){count = num;if (cur == cur->next->next) //当前节点的后一个节点的next是当前节点时,结束循环{break;} while (--count)    //找到第num个元素{cur = cur->next;}del = cur->next;cur->data = cur->next->data;cur->next = cur->next->next;free(del); //删除第num个元素del == NULL;}*pHead = cur;return cur;
}

测试函数:

void Test13() // 测试约瑟夫环
{pList l1;int i = 0;InitLinkList(&l1);for (i = 1; i <= 41; i++){PushBack(&l1, i);}pLinkNode pos = Find(l1,41);  //查找元素,Find函数在单链表的实现中pos->next = l1;     //构建环pos=JoseCycle(&l1,3);   printf(" %d \n", pos->data);printf(" %d \n", pos->next->data);
}

转载于:https://blog.51cto.com/haipi/1737171

链表常见面试题二:约瑟夫环相关推荐

  1. 搞懂单链表常见面试题

    搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识和常见面试题,这些题有的来自 <剑指 offer> ,有的来自<程序 ...

  2. 数据结构与算法—链表常见面试题(持续更新)

    文章目录 一.链表环 1.判断链表是否有环 题目 方法1: 方法2: 二.反转链表 1.完全反转链表 题目: 方法1 方法2 2.反转部分链表 题目: 方法1 参考链接:https://blog.cs ...

  3. MySQL数据库常见面试题二(传智专修学院2017级java4班)

    1. 在数据库中你怎么把时间进行格式化 例如使用 DATE_FORMAT(time,'%Y-%m-%d') 2. 如果左连接表中 左表有1条数据 右表有4条匹配的数据 结果是怎样的 右表展示4条匹配数 ...

  4. js常见面试题(二)

    原型和原型链 原型链:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造 ...

  5. python自动化测试常见面试题二_思考|自动化测试面试题第二波

    本内容为企业面试关于自动化测试的考题,大家可以自己思考下如何作答,欢迎把答案留言到本文下方哦. 问题1:设计接口测试⽤用例例时,涉及的是电商系统,其中包括很多修改,如商品.商家.店铺等等,针对这些数据 ...

  6. 深度学习试题_深度学习理论类常见面试题(二)

    8.Attention 对比 RNN 和 CNN,分别有哪点你觉得的优势 对比 RNN 的是,RNN 是基于马尔可夫决策过程,决策链路太短,且单向 对比 CNN 的是,CNN 基于的是窗口式捕捉,没有 ...

  7. mysql某个表的列除以2_mysql常见面试题(二)

    mysql常见面试题(二) 标签:范式 索引 复制原理 事务引擎 储存结构 内存分配 1.数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库 ...

  8. 在单链表写入一组数据代码_链表常见操作和15道常见面试题

    什么是单链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样 ...

  9. vue常见面试题(附带答案)超实用!!建议收藏!!

    一.vue常见面试题 二.生命周期函数面试题 三.vue路由面试题 四.vuex常见面试题 一.vue常见面试题 1.vue优点? 答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 ...

最新文章

  1. ORA-25155: NATURAL 联接中使用的列不能有限定词
  2. 谁会为小扎的AI管家配音:网民选了这位老帅哥
  3. 活久见: 原来 Chrome 浏览器支持 Import from 语法
  4. 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
  5. JAVA访问控制符(写给初学者的)
  6. Java正则表达式匹配、替换HTML内容
  7. .NET Core微服务之基于IdentityServer建立授权与验证服务(续)
  8. GDB调试汇编堆栈过程的学习
  9. qt及qt quick开发实战精解_Qt5实战001:Qt 5.15下载安装详解
  10. Nginx中保持长连接的配置 - 运维记录
  11. 探讨e.target与e.currentTarget
  12. sqlyog设置自动补全_SQLYog快捷键大全
  13. 研发/项目计划管理表格
  14. Altium Designed导出Gerber,Gerber文件所对应的层
  15. mysql实验体会怎么写_数据库实验心得
  16. 覆盖计算机网络分类有哪些 英语缩写,简述按覆盖范围划分计算机网络的分类类型有哪些?英语缩写分别是什么?...
  17. 计算机网络技术发展四个阶段,计算机网络的发展分哪四个阶段,特点?
  18. 使用TypeScript重构Axios:让你的项目更加完善
  19. 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
  20. 赢在项目工具的落地-讲师团俊平老师主讲

热门文章

  1. java语言程序设计答案_《java语言程序设计》练习题及答案
  2. 在MacOS下使用Fiddler抓包
  3. python中关于turtle库的学习笔记
  4. 什么是 Webpack?【Webpack Book 翻译】
  5. 细说Linux 系统优化
  6. android动画Rotate
  7. mysql与hive比较
  8. mysql练习用的数据集下载(转载+自己补充步骤)
  9. 5-3 神经网络算法预测销量高低(改进版,消除了一些warning)
  10. C++编程思想:C++string