链表常见面试题二:约瑟夫环
面试题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
链表常见面试题二:约瑟夫环相关推荐
- 搞懂单链表常见面试题
搞懂单链表常见面试题 Hello 继上次的 搞懂基本排序算法,这个一星期,我总结了,我所学习和思考的单链表基础知识和常见面试题,这些题有的来自 <剑指 offer> ,有的来自<程序 ...
- 数据结构与算法—链表常见面试题(持续更新)
文章目录 一.链表环 1.判断链表是否有环 题目 方法1: 方法2: 二.反转链表 1.完全反转链表 题目: 方法1 方法2 2.反转部分链表 题目: 方法1 参考链接:https://blog.cs ...
- MySQL数据库常见面试题二(传智专修学院2017级java4班)
1. 在数据库中你怎么把时间进行格式化 例如使用 DATE_FORMAT(time,'%Y-%m-%d') 2. 如果左连接表中 左表有1条数据 右表有4条匹配的数据 结果是怎样的 右表展示4条匹配数 ...
- js常见面试题(二)
原型和原型链 原型链:当访问一个对象的某个属性时,会先在这个对象本身属性上查找,如果没有找到,则会去它的__proto__隐式原型上查找,即它的构造函数的prototype,如果还没有找到就会再在构造 ...
- python自动化测试常见面试题二_思考|自动化测试面试题第二波
本内容为企业面试关于自动化测试的考题,大家可以自己思考下如何作答,欢迎把答案留言到本文下方哦. 问题1:设计接口测试⽤用例例时,涉及的是电商系统,其中包括很多修改,如商品.商家.店铺等等,针对这些数据 ...
- 深度学习试题_深度学习理论类常见面试题(二)
8.Attention 对比 RNN 和 CNN,分别有哪点你觉得的优势 对比 RNN 的是,RNN 是基于马尔可夫决策过程,决策链路太短,且单向 对比 CNN 的是,CNN 基于的是窗口式捕捉,没有 ...
- mysql某个表的列除以2_mysql常见面试题(二)
mysql常见面试题(二) 标签:范式 索引 复制原理 事务引擎 储存结构 内存分配 1.数据库三范式是什么? 第一范式(1NF):字段具有原子性,不可再分.(所有关系型数据库系统都满足第一范式数据库 ...
- 在单链表写入一组数据代码_链表常见操作和15道常见面试题
什么是单链表 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer),简单来说链表并不像数组那样 ...
- vue常见面试题(附带答案)超实用!!建议收藏!!
一.vue常见面试题 二.生命周期函数面试题 三.vue路由面试题 四.vuex常见面试题 一.vue常见面试题 1.vue优点? 答:轻量级框架:只关注视图层,是一个构建数据的视图集合,大小只有几十 ...
最新文章
- ORA-25155: NATURAL 联接中使用的列不能有限定词
- 谁会为小扎的AI管家配音:网民选了这位老帅哥
- 活久见: 原来 Chrome 浏览器支持 Import from 语法
- 【计算理论】非确定性有限自动机 ( 计算过程 | 计算树 | 确定可接受字符串 | 设计非确定性有限自动机 | 空字符 )
- JAVA访问控制符(写给初学者的)
- Java正则表达式匹配、替换HTML内容
- .NET Core微服务之基于IdentityServer建立授权与验证服务(续)
- GDB调试汇编堆栈过程的学习
- qt及qt quick开发实战精解_Qt5实战001:Qt 5.15下载安装详解
- Nginx中保持长连接的配置 - 运维记录
- 探讨e.target与e.currentTarget
- sqlyog设置自动补全_SQLYog快捷键大全
- 研发/项目计划管理表格
- Altium Designed导出Gerber,Gerber文件所对应的层
- mysql实验体会怎么写_数据库实验心得
- 覆盖计算机网络分类有哪些 英语缩写,简述按覆盖范围划分计算机网络的分类类型有哪些?英语缩写分别是什么?...
- 计算机网络技术发展四个阶段,计算机网络的发展分哪四个阶段,特点?
- 使用TypeScript重构Axios:让你的项目更加完善
- 【CrackMe 实战】逆向破解实战之 001 Acid burn.exe
- 赢在项目工具的落地-讲师团俊平老师主讲