Java数据结构单向循环链表实现约瑟夫问题(丢手绢)
环形链表
实例:使用环形链表解决约瑟夫问题(丢手绢)
构建一个单向环形链表思路
1)先创建第一个节点,让first指向该节点,并形成环形
2)加入环形链表
遍历环形链表
1)先让一个辅助指针,指向first节点
2)while循环遍历环形链表
package com.cwnu.linkList.link;import com.cwnu.linkList.node.Node;//创建环形的单向链表
public class Josepfu {//创建一个first节点,无编号节点private Node first = null;private int Number;//添加小孩节点,构建环形链表public void addBoy(int number) {//添加多少个节点this.Number = number;//number做一个数据校验if (number < 1) {System.out.println("数据无效");return;}//辅助变量,帮助其构建环形链表Node temp = null;//for循环添加环形链表for (int i = 1; i <= number; i++) {//根据变量添加节点Node boy = new Node(i);if (i == 1) {first = boy;first.setNext(first);temp = first;//辅助指针指向first} else {temp.next = boy;boy.next = first;temp = temp.next;}}}//遍历环形链表public void showBoy() {//判断链表是否为空if (first == null) {System.out.println("链表为空");return;}Node temp = first;while (true) {System.out.printf("小孩的编号%d \n", temp.getNo());if (temp.getNext() == first) {//说明遍历完毕break;}temp = temp.next;}}//根据用户的输入,计算出小孩出圈顺序/*** @param startNo 表示开始报数小孩的number* @param countNum 报多少次数*/public void countBoy(int startNo, int countNum) {if (first == null || startNo < 1 || startNo > Number) {System.out.println("参数输入有误");return;}//创建辅助指针,帮助出圈,让其指向循环链表的最后节点Node temp = first;while (true) {if (temp.getNext() == first) {break;}temp = temp.next;}//初始化first节点和temp节点,将其指向用户输入的开始节点和开始前一个节点for (int i = 0; i < startNo - 1; i++) {first = first.next;temp = temp.next;}while (true) {if (first.next == temp.next){//最后一个同学System.out.printf("出列编号为%d", first.getNo());break;}for (int i = 0; i < countNum - 1; i++) {first = first.next;temp = temp.next;}//此时first辅助节点指向的就是出列节点temp.next = first.next;System.out.printf("出列编号为%d\t", first.getNo());first = first.next;}}
}
Java数据结构单向循环链表实现约瑟夫问题(丢手绢)相关推荐
- Java中使用链表解决约瑟夫问题(丢手绢问题)
文章目录 文章目录 前言 一.思路分析 二.代码实现 1.Chird类建立 2.链表创建 3.功能实现 总结 其他解决方式: Java中使用list解决约瑟夫问题https://blog.csdn.n ...
- Java中使用list解决约瑟夫问题(丢手绢问题)
文章目录 文章目录 前言 一.思路分析 二.代码实现 总结 其他解决方式: Java中使用环形链表解决约瑟夫问题https://blog.csdn.net/qq_35813811/article/de ...
- c语言循环链表约瑟夫问题的时间复杂度,用单向循环链表解决约瑟夫问题算法优劣性分析.doc...
用单向循环链表解决约瑟夫问题算法优劣性分析 用单向循环链表解决约瑟夫问题算法优劣性分析 摘要: 首先由简单问题引入约瑟夫问题,然后用单向循环链表解决约瑟夫问题,最后对模拟方法及数学方法的优劣性进行分析 ...
- 数据结构与算法: 约瑟夫问题(丢手绢)
数据结构与算法: 约瑟夫(丢手绢)问题(单向链表,双向链表解决) Tips: 采用java语言, 关注博主,底部附有完整代码 采用到的知识点: 单向环形链表 双向环形链表 单向 / 双向 环形链表出圈 ...
- 数据结构-单向循环链表、双向循环链表、仿真链表
一.单向循环链表: 1.概念: 单向循环链表是单链表的另一种形式,其结构特点是链表中最后一个结点的指针不再是结束标记,而是指向整个链表的第一个结点,从而使单链表形成一个环. 和单链表相比,循环单链表的 ...
- python约瑟夫环单向循环链表_约瑟夫环的单向循环链表的实现代码
/************************************************************************* > File Name: JosephCir ...
- 数据结构与算法--我们来玩丢手绢(约瑟夫环问题)
我们来玩丢手绢 昨天我们打扑克,今天我们丢手绢 丢手绢我们都知道这个游戏,他的由来由约瑟夫 (Josephus)提出来的 据说著名犹太历史学家Josephus有过以下的故事:在罗马人占领乔塔帕特后,3 ...
- 【循环链表】数据结构——单向循环链表和双向循环链表操作笔记
循环链表 一.单向循环链表 1.单向循环链表的节点 2.单向循环链表的结构 二.双向循环链表 1.双向循环链表示意图 2.双向循环链表节点设计 3.双向循环链表的一般性结构 4.双向循环链表头插法插入 ...
- 约瑟夫环 -- 丢手绢问题
问题描述 约瑟夫环问题,也称为"丢手绢问题". 编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3-这样依次报),数到 m 的 士兵 ...
最新文章
- 关于微信公众号注意事项
- linux中sudo如何读取标准输入作为密码,避免每次都输入密码?
- UI复习练习_优酷布局
- cmd中如何查看当前绝对路径_如何查看 Linux 中文件打开情况?
- 笔记本电脑清洁小记(附螺丝滑丝处理,常见意外情况)
- linux zip包解压乱码
- 苹果:App Store中国区无版号游戏8月1日起下架;美国计划打造量子互联网;HHVM 4.67 发布 | 极客头条...
- Docker 大势已去,Podman 崛起
- 在服务中mysql启动不了了_mysql在服务项里无法启动
- c语言经典题(期中/期末复习)(xdoj)
- 构建数据指标预警系统
- react-dnd官方文档
- (vcom-1141) Identifier “<protected>“ does not identify a component declaration.
- mysql 行转列查询优化_行转列及列转行查询
- 2021年电工(初级)考试报名及电工(初级)免费试题
- Ubuntu14.04安装有道词典
- SQL SERVER2008局域网内连不上问题
- 怎么锻炼孩子的想象力创造力_家长培养孩子想象力创造力的训练游戏
- 掌握模拟电路设计需要阅读的几本参考书!
- c# 时间格式化为英文_C#中如何将日期中的月份转化成英文