环形链表的约瑟夫问题
前言:
据说著名犹太历史学家Josephus有过如下故事:
在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈。
由第一个人开始报数,报数到3的人就自杀,再由下一个人重新报1,报数到3的人就自杀,这样依次下去,知道剩下最后一个人时,那个人可以自由选择自己的命运。
这就是著名的约瑟夫问题。现在请用单向链表描述该结构并呈现整个自杀过程。

目录
题目:
示例:
图例:
题目解析:
约瑟夫问题的本质:
图例:
删除节点:
未删除,继续报数:
代码演示:

题目:
编号为1到n的n 个人围成一圈。从编号为 1 的人开始报数,报到 m 的人离开,下一个人继续从 1开始报数。
n-1 轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?

示例:
- 输入: 5 , 2
- 返回值: 3
说明 :
- 开始 5 个 人 他们的编号分别是 :1,2,3,4,5
- 从1开始报数,1->1,2->2 编号为2的人离开
- 剩下:1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开
- 剩下:1,3,5,从5开始报数,5->1,1->2编号为1的人离开
- 剩下:3,5,从3开始报敷,3->1,5->2编号为5的人离开
- 最后留下人的编号是3
图例:

- 通过图例和题目要求,让我们想到了一种链表,带环链表。
- 带环链表之所以叫带环链表,是因为最后面的节点内的指针指向了头节点,也就是头尾相连了。
- 且,带环链表的创建和单链表的创建是一样的,只不过带环链表多了一步,尾节点的指针 next 指向了头节点。

题目解析:
- 首先,因为题目的要求,需要拥有两个数,一个是指定的次数,一个是节点的个数。
![]()
- 其次,我们要创建链表的节点,而创造链表的节点需要开辟空间,这里需要使用malloc函数,并将开辟的空间交予头节点指针,以此形成第一个节点。

- 在进行开辟空间后,需要形成链表,而链表中,节点的个数和之前的输入值有关,所以需要进行循环创建节点,对此要和上面开辟节点的函数形成调用联动。
- 而且,为了使得变成一个环形链表,我们需要在所有节点开辟后,并形成单链表的最后,将链表的最后一个节点内部的指针指向头节点。

- 在形成节点后我们则进入约瑟夫问题。

约瑟夫问题的本质:

如上图所示,我们可以知道,约瑟夫问题的本质实际上就是删除指定位置的节点。
而对于删除指定位置的节点,我们需要两个指针进行遍历解决。
链表——单链表的简单介绍-CSDN博客
https://blog.csdn.net/2301_76445610/article/details/133811446?spm=1001.2014.3001.5501
两个指针:一个是通过遍历访问指定位置(cur),一个是通过遍历访问到指定位置的前一个节点(prev)。
而又如图所示,当最后只剩下一个链表的时候,那一个遍历指定位置的指针指向的节点,该节点内部的指针指向的是它自己。
所以当遍历指定位置 的节点 的内部指针 指向它自己的时候,就是跳出约瑟夫游戏判断的时候。

- 因为之前返回值是返回环形指针的最后一个尾节点(原单链表尾节点),所有prev是尾节点,而prev->next 则是原单链表的头节点。
![]()
- 而因为我们是从头指针开始的约瑟夫问题的,所以报数是从1开始的,这里我们就需要一个计数(报数)变量。

- 而接下来,关于约瑟夫问题的核心部分,便是计数和删除节点。
- 当计数变量抵达我们指定的数字后,需要将节点进行删除,进行修改节点内部指针指向,且将计数变量重置回初始值(重置回1),而未抵达我们指定的数字时,则继续进行计数。
图例:

删除节点:

未删除,继续报数:

代码演示:


相关文章:
环形链表的约瑟夫问题
前言: 据说著名犹太历史学家Josephus有过如下故事: 在罗马人占领乔塔帕特后,39个犹太人和Josephus及他的朋友躲进一个洞里,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个…...
python requests.get发送Http请求响应结果乱码、Postman请求结果正常
最近在写爬虫程序,自己复制网页http请求的url、头部,使用python requests和postman分别请求,结果使用postman发送http get请求,可以得到正常的json数据,但是使用python的requests发送则接受到乱码,response…...
Dialog动画相关
最近需求一个问题,想要在dialog消失时增加动画,之前如上一个文章中遇到的,但是最后改了实现方式,要求在特定的地方缩放,原来的dialog高度是wrap_content的,这样是无法实现的,因此首先需要将dial…...
【java学习—八】==操作符与equals方法(2)
文章目录 1. 操作符2. equals方法String对象的创建 1. 操作符 (1)基本类型比较值 : 只要两个变量的值相等,即为 true. int a5; if(a6){…} (2)引用类型比较引用 ( 是否指向同一个对象 ): 只有指向同一个对象时&#…...
Linux系统编程_进程间通信第1天:IPC、无名管道pipe和命名管道mkfifo(半双工)、消息队列msgget(全双工)
1. 进程间通信概述(427.1) 2. 管道通信原理(428.2) 进程间的五种通信方式介绍 https://blog.csdn.net/wh_sjc/article/details/70283843 进程间通信(IPC,InterProcess Communication)ÿ…...
figma+windows系统
...
typescript实现一个简单的区块链
TypeScript 是一种由 Microsoft 推出的开源编程语言,它是 JavaScript 的超集,允许程序员使用面向对象的方式编写代码,并提供类型检查和语法提示等优秀的开发体验。区块链技术是一种分布式的、可靠的、不可篡改的数据库技术,用于记…...
服务器被暴力破解怎么解决
暴力破解分两种,一种是SSH暴力破解,属于Linux服务器。一种是RDP暴力破解,属于Windows服务器。两者其实攻击手法一样,都是黑客利用扫描工具对某一个IP段扫描,而Linux跟Windows登录端口为别是22和3389。那怎样才能有效避…...
用来生成二维矩阵的dcgan
有大量二维矩阵作为样本,为连续数据。数据具有空间连续性,因此用卷积网络,通过dcgan生成二维矩阵。因为是连续变量,因此损失采用nn.MSELoss()。 import torch import torch.nn as nn import torch.optim as optim import numpy a…...
免费的国产数据集成平台推荐
在如今的数字化时代下,企业内部的数据无疑是重要资产之一。随着数据源的多样性和数量剧增,如何有效地收集、整合、存储、管理和分析数据变得至关重要。为了解决这些常见痛点,数据集成平台成为了现代企业不可或缺的一部分。 数据集成是现代数…...
【yolov8系列】yolov8的目标检测、实例分割、关节点估计的原理解析
1 YOLO时间线 这里简单列下yolo的发展时间线,对每个版本的提出有个时间概念。 2 yolov8 的简介 工程链接:https://github.com/ultralytics/ultralytics 2.1 yolov8的特点 采用了anchor free方式,去除了先验设置可能不佳带来的影响借鉴Genera…...
5256C 5G终端综合测试仪
01 5256C 5G终端综合测试仪 产品综述: 5256C 5G终端综合测试仪主要用于5G终端、基带芯片的研发、生产、校准、检测、认证和教学等领域。该仪表具备5G信号发送功能、5G信号功率特性、解调特性和频谱特性分析功能,支持5G终端的产线高速校准及终端发射机…...
Springboot Actuator 环境搭建踩坑
JMX和Springboot Actuator JMX是Java Management Extensions,它是一个Java平台的管理和监控接口。 为什么要搞JMX呢?因为在所有的应用程序中,对运行中的程序进行监控都是非常重要的,Java应用程序也不例外。我们肯定希望知道Java…...
Vue-3.3ESLint
ESLint代码规范 代码规范:一套写代码的约定规则。 JavaScript Standard Style规范说明https://standardjs.com/rules-zhcn.html 代码规范错误 如果你的代码不符合standard的要求,ESlint会跳出来提醒。 比如:在mian.js中随意做一些改动&a…...
STROBE-MR
Welcome to the STROBE-MR website! About: STROBE-MR stands for “Strengthening the Reporting of Observational Studies in Epidemiology using Mendelian Randomization”. Inspired by the original STROBE checklist, the STROBE-MR guidelines were developed to ass…...
Hive安装配置 - 内嵌模式
文章目录 一、Hive运行模式二、安装配置内嵌模式Hive(一)下载hive安装包(二)上传hive安装包(三)解压缩hive安装包(四)配置hive环境变量(五)关联Hadoop&#x…...
html中登录按钮添加回车键登录
原文链接有3种方法,其它2中不会弄,第二种方法成功,下面详细说说 原html的登录部分是 <button class"btn btn-success btn-block waves-effect waves-light" id"button" >登入</button> 在该html中增加 &…...
PCL 空间两平面交线计算
PCL 空间两平面交线计算 std::vector<float> LineInPlanes(std::vector<double> para1, std::vector<double> para2) {std::vector<float...
交替合并字符串
题目要求 给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 示例 1: 输入:word1 …...
Linux考试复习整理
文章目录 Linux考试整理一.选择题1.用户的密码现象放置在哪个文件夹?2.删除文件或目录的命令是?3.显示一个文件最后几行的命令是?4.删除一个用户并同时删除用户的主目录5.Linux配置文件一般放在什么目录?6.某文件的组外成员的权限…...
新手入门:借助快马平台轻松理解并解决战网更新睡眠问题
新手入门:借助快马平台轻松理解并解决战网更新睡眠问题 作为一个刚接触游戏客户端维护的新手,遇到战网更新服务进入睡眠模式的问题时,往往会感到无从下手。最近我在使用InsCode(快马)平台时,发现它可以帮助我们快速理解并解决这类…...
RadarSimPy:Python雷达仿真的完整指南与实战教程
RadarSimPy:Python雷达仿真的完整指南与实战教程 【免费下载链接】radarsimpy Radar Simulator built with Python and C 项目地址: https://gitcode.com/gh_mirrors/ra/radarsimpy RadarSimPy是一个基于Python和C构建的强大雷达仿真工具,为雷达系…...
使用Prometheus监控GeoIP2-CN:查询延迟与更新状态指标
使用Prometheus监控GeoIP2-CN:查询延迟与更新状态指标 你是否遇到过GeoIP2-CN数据库查询缓慢导致服务延迟?或者因数据库未及时更新造成IP定位错误?本文将详细介绍如何通过Prometheus实现对GeoIP2-CN的全方位监控,包括查询性能指标…...
OpenClaw备份自动化:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF智能分类归档云端文件
OpenClaw备份自动化:Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF智能分类归档云端文件 1. 为什么需要智能文件归档 我的电脑桌面常年堆积着各种临时下载的PDF、会议记录、代码片段和截图。每次想找特定文件时,要么靠记忆模糊搜索,要么…...
Janus-Pro-7B文生图作品展:中国风角色、科幻机甲、自然生态高清图集
Janus-Pro-7B文生图作品展:中国风角色、科幻机甲、自然生态高清图集 1. 模型能力概览 Janus-Pro-7B是DeepSeek推出的统一多模态模型,它在一个框架内同时实现了图像理解和文本生成图像两大核心功能。这个设计思路很巧妙——传统上,理解图像和…...
别再纠结SSR还是SSG了!用create-nuxt-app创建项目时,这个选择直接影响你的部署成本
Nuxt.js渲染模式深度解析:如何用create-nuxt-app做出高性价比技术选型 在2023年的前端技术栈中,Nuxt.js依然保持着作为Vue生态中最成熟SSR解决方案的领先地位。但很多团队在项目启动时,往往会在create-nuxt-app的配置界面陷入纠结——特别是当…...
[Python] venv、pip、解释器到底什么关系?一篇讲清环境管理
在学习 Python 的过程中,很多开发者都会遇到这样一个“经典困惑”: 为什么我用 pip install 安装了包,但代码里却 import 失败? 为什么有多个 Python? venv 到底在干嘛?它是不是“虚拟 Python”? 如果你也有这些疑问,那么这篇文章就是为你准备的。 本文将从底层逻辑出…...
Phi-4-mini-reasoning惊艳效果:对存在矛盾前提的题目主动识别并预警
Phi-4-mini-reasoning惊艳效果:对存在矛盾前提的题目主动识别并预警 1. 模型核心能力展示 Phi-4-mini-reasoning作为一款专注于推理任务的文本生成模型,在处理数学题、逻辑题等需要多步分析的场景时展现出独特优势。最令人惊艳的是,它能够主…...
避免数据丢失!制作Win10启动盘前必须知道的U盘备份技巧
避免数据丢失!制作Win10启动盘前必须知道的U盘备份技巧 在数字化时代,U盘不仅是便携存储工具,更是系统维护的重要载体。当我们需要为电脑安装或重装Windows 10系统时,制作启动盘是最常用的方法之一。然而,许多用户在操…...
51单片机模拟IIC从机实战:手把手教你用逻辑分析仪调试主从机通信(附完整代码)
51单片机模拟IIC从机实战:逻辑分析仪调试与波形诊断全解析 在嵌入式开发中,IIC总线因其简洁的两线制设计(SCL时钟线与SDA数据线)被广泛应用于传感器、EEPROM等外设通信。但当开发者尝试用51单片机模拟IIC从机时,往往会…...
