一、环形列表:

二、构建一个单向的环形链表思路

1.先创建第一个节点让first指向该节点,并形成环形
2.后面当我们每创建一个新的节点,就把该节点,加入到己有的环形链表中即可

三、遍历环形链表

1.先让一个辅助指针(变量)curBoy,指向first节点
2.然后通过一个while循环遍历该环形链表即可curBoy.next==first结束

四、环形列表节点类:

// 创建一个Boy类,表示一个节点
class Boy {private int no;// 编号private Boy next; // 指向下一个节点,默认nullpublic Boy(int no) {this.no = no;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public Boy getNext() {return next;}public void setNext(Boy next) {this.next = next;}
}

五、约瑟夫环问题:

六、约瑟夫环解决类(环形列表类):

插入环形列表节点:

  • 1.插入节点
 // 添加小孩节点,构建成一个环形的链表,nums为参加游戏的人数public void addBoy(int nums) {// nums 做一个数据校验if (nums < 1) {System.out.println("nums的值不正确");return;}Boy curBoy = null; // 辅助指针,帮助构建环形链表// 使用for来创建我们的环形链表for (int i = 1; i <= nums; i++) {// 根据编号,创建小孩节点Boy boy = new Boy(i);// 如果是第一个小孩if (i == 1) {first = boy;first.setNext(first); // 构成环curBoy = first; // 让curBoy指向第一个小孩} else {curBoy.setNext(boy);//boy.setNext(first);//curBoy = boy;}}}
  • 2.删除节点(出圈):
// 根据用户的输入,计算出小孩出圈的顺序/*** @param startNo*            表示从第几个小孩开始数数* @param countNum*            表示数几下* @param nums*            表示最初有多少小孩在圈中*/public void countBoy(int startNo, int countNum, int nums) {// 先对数据进行校验if (first == null || startNo < 1 || startNo > nums) {System.out.println("参数输入有误, 请重新输入");return;}// 创建要给辅助指针,帮助完成小孩出圈Boy helper = first;// 需求创建一个辅助指针(变量) helper , 事先应该指向环形链表的最后这个节点while (true) {if (helper.getNext() == first) { // 说明helper指向最后小孩节点break;}helper = helper.getNext();}//小孩报数前,先让 first 和  helper 移动 k - 1次for(int j = 0; j < startNo - 1; j++) {first = first.getNext();helper = helper.getNext();}//当小孩报数时,让first 和 helper 指针同时 的移动  m  - 1 次, 然后出圈//这里是一个循环操作,知道圈中只有一个节点while(true) {if(helper == first) { //说明圈中只有一个节点break;}//让 first 和 helper 指针同时 的移动 countNum - 1for(int j = 0; j < countNum - 1; j++) {first = first.getNext();helper = helper.getNext();}//这时first指向的节点,就是要出圈的小孩节点System.out.printf("小孩%d出圈\n", first.getNo());//这时将first指向的小孩节点出圈first = first.getNext();helper.setNext(first); }System.out.printf("最后留在圈中的小孩编号%d \n", first.getNo());}

单向环形列表及应用场景(约瑟夫环)相关推荐

  1. 《恋上数据结构第1季》单向循环链表、双向循环链表以及约瑟夫环问题

    循环链表(CircleList) 链表的接口设计 单向循环链表 单向循环链表完整源码 双向循环链表 双向循环链表完整源码 双向循环链表解决约瑟夫环问题 如何发挥循环链表的最大威力? 静态链表 数据结构 ...

  2. 数据结构之单向环形列表解决josef问题

    1.定义节点类 该节点类中只有孩子的编号,以及指向下一个节点的"指针" package com.ebiz.list.josepfu;/*** @author YHj* @creat ...

  3. 五、单向环形链表---实现约瑟夫(Josephu)问题

    使用单向环形链表实现约瑟夫(Josephu)问题 1.约瑟夫(Josephu)问题描述 Josephu 问题为:设编号为 1,2,- n 的 n 个人围坐一圈,约定编号为 k(1<=k<= ...

  4. java实现环形链表解决约瑟夫环问题

    什么是环形链表? 环形链表就是单向链表的基础上让链表的首尾相连,形成一个环,这就是一个循环链表. 什么是约瑟夫环问题? 约瑟夫环如下: 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数, ...

  5. (数据结构与算法)单向环形链表解决约瑟夫问题

    约瑟夫(Josephu)问题 Josephu问题为: 设编号为1, 2,- n的n个人围坐一圈,约定编号为k (1<=k<=n) 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始 ...

  6. python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码

    /************************************************************************* > File Name: JosephCir ...

  7. 用java解决约瑟夫循环问题,Java实现循环列表解决约瑟夫环问题

    约瑟夫环:共有n个人围成一圈,从1开始报数,数到m的人出圈,求最后幸运者序号?? 下面用Java实现循环列表解决这个问题: package com.iteye.ljmdbc7a; import jav ...

  8. 【算法-剑指 Offer】62. 圆圈中最后剩下的数字(环形链表;约瑟夫环;动态规划)

    剑指 Offer 62. 圆圈中最后剩下的数字 - 力扣(LeetCode) 发布:2021年9月12日12:18:52 问题描述及示例 0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每 ...

  9. 【C++】约瑟夫环问题:任给正整数n和k,按下述方法可以得到1,2, …n的一个置换:将数字1,2,…,n环形排列,按顺时针方向自1开始报数,报到K时输出该位置上的数字,并使其出列。

    题目分析 约瑟夫环问题:任给正整数n和k,按下述方法可以得到1,2, -n的一个置换:将数字1,2,-,n环形排列,按顺时针方向自1开始报数,报到K时输出该位置上的数字,并使其出列.然后从他在顺时针方 ...

最新文章

  1. 使用Pad Designer制作焊盘
  2. 软件工程概论 课堂练习 第2次作业5【顺序图思考题——绘制手机拨号顺序图】
  3. asp.core api 通过socket和服务器通信发送udp_【网络通信】TCP的通信过程
  4. Question | 网站被黑客扫描撞库该怎么应对防范?
  5. Hadoop生态hive(五)Hive QL数据库
  6. Eclipse C/C++开发环境搭建
  7. 对接闪送_中国快递业加速出海,圆通上线“全球闪送”,与顺丰、申通抢市场...
  8. Postgres 数据库大批量单表导入数据引发性能故障的处理
  9. 用vb编写一个简易的编译器界面
  10. 文件上传利器SWFUpload入门简易教程(转)
  11. 用户画像 客户消费模型表
  12. 《计算机网络教程》(微课版 第五版)第四章 网络层与网络互连 课后习题及答案
  13. 计算机六个方面的领域,计算机的应用领域分为哪六个方面
  14. 海关179号出口清单报文CEB603Message描述规范
  15. 三代测序数据自纠错技术 和 二代测序数据对三代测序数据纠错的技术。
  16. 动态代理的中介出租房屋
  17. java.util之ArrayList使用
  18. nagiosxi 监控Linux系统
  19. 小学生的搞笑考试卷子
  20. Python pypinyin库,实现文字转拼音

热门文章

  1. SQL Server 2008 允许远程链接 解决方法
  2. MySQL基础 (DML)
  3. RHEL 6 下VNC Server 的安装配置
  4. 回溯算法超详细讲解(附代码)
  5. 工预-Navicat for MYSQL
  6. Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known host
  7. Python学习笔记:面向对象编程(1)
  8. 5、VTK在图像处理中的应用
  9. Linux 动态库的显示调用
  10. 牛客网题目——替换空格