Java 用单向循环链表实现 约瑟夫问题
public class lianbiao2 { class Node{
Node next;
int number; public Node getNext() {
return next;
} public void setNext(Node next) {
this.next = next;
} public Node(int i) {
this.number = i;
} public Node(Node next, int number) {
this.next = next;
this.number = number;
} public int getNumber() {
return number;
} public void setNumber(int number) {
this.number = number;
}
} public Node firsetnode;
public Node tempNode;
int len; /**
* 造环的关键是:
* 再生成第一个Node的时候,让两个引用(firsetnode和tempNode)指向他,之后循环时,每次通过tempNode引用操作尾结点,将新生成的节点加上
* 当长度够后,将新生成的节点的 next 指向开始就一直没变的 firsetnode的引用,也就是指向了第一一个生成的节点,完成 环状
*/ public void setcrcle(int length){
for(int i=1;i<=length;i++){
Node node = new Node(i);
if(i==1){
firsetnode = node;
tempNode = node;
}else{
if(i != length){
tempNode.next= node;
tempNode = node;
}else{
tempNode.next=node;
node.next = firsetnode;
}
}
len++;
}
System.out.println(len);
} public int play(int keillNumber){
return play(1,keillNumber);
} /**
* 先找到开始节点。
* 从开始节点开启循环,遍历整个环,退出条件是,tempNode没有后续了 且 不等于自身
* 实现循环 后,当count等于死亡数字,直接删除下一个节点,count重新置1
*
*
* @param start 开始位置
* @param killNumber 死亡数字
* @return
*/
public int play(int start,int killNumber){
int count =1;
Node tempNode = firsetnode; for(int i = 1;i<start;i++){
tempNode= firsetnode.next;//找到初始节点
} while(tempNode.next != null && tempNode.next !=tempNode){
if(count != killNumber-1){
count++;
tempNode=tempNode.next;//实现循环
}else{
System.out.println("死的是"+tempNode.next.getNumber());
tempNode.next=tempNode.next.next;//直接删除下一个节点
tempNode= tempNode.next;//实现循环
count=1;
} }
return tempNode.getNumber();
} public static void main(String[] args) {
lianbiao2 l =new lianbiao2();
l.setcrcle(10);
System.out.println("存活的是"+l.play(2,5));;
}
}
Java 用单向循环链表实现 约瑟夫问题的更多相关文章
- 关于单向循环链表的约瑟夫问题(Java实现)
关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. ...
- (java实现)单向循环链表
什么是单向循环链表 单向循环链表基本与单向链表相同,唯一的区别就是单向循环链表的尾节点指向的不是null,而是头节点(注意:不是头指针). 因此,单向循环链表的任何节点的下一部分都不存在NULL值. ...
- java实现单向循环链表
链表图解 带头结点的链表: 不带头结点的链表: 区别 带头结点的链表容易代码实现 不带头结点的容易实现循环链表和双向链表 代码的实现 (增减 删除) 节点实现: public class node { ...
- C语言单向循环链表解决约瑟夫问题
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,4 ...
- 使用java的循环单向链表解决约瑟夫问题
什么是约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...
- java与数据结构(4)---java实现双向循环链表
线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...
- JS数据结构第三篇---双向链表和循环链表之约瑟夫问题
一.双向链表 在上文<JS数据结构第二篇---链表>中描述的是单向链表.单向链表是指每个节点都存有指向下一个节点的地址,双向链表则是在单向链表的基础上,给每个节点增加一个指向上一个节点的地 ...
- (java实现)双向循环链表
什么是双向循环链表 在了解双向循环链表之前,如果对链表还没有一个清晰的概念,建议你看看单链表和单向循环链表,这有利于你更好的理解下面的内容.(废话有点多[逃] 相比单链表,双向循环链表是一个更加复杂的 ...
- PTA 6-15 用单向循环链表实现猴子选大王 (20 分)
一群猴子要选新猴王.新猴王的选择方法是:让n只候选猴子围成一圈,从某位置起顺序编号为1~n号.每只猴子预先设定一个数(或称定数),用最后一只猴子的定数d,从第一只猴子开始报数,报到d的猴子即退出圈子: ...
随机推荐
- Java 学习笔记之 Error和Exception的联系
Error和Exception的联系: Error和Exception的联系 继承结构:Error和Exception都是继承于Throwable,RuntimeException继承自Excepti ...
- Tomcat源码分析一:编译Tomcat源码
Tomcat源码分析一:编译Tomcat源码 1 内容介绍 在之前的<Servlet与Tomcat运行示例>一文中,给大家带来如何在Tomcat中部署Servlet应用的相关步骤,本文将就 ...
- Unknown column 'user_id' in 'where clause'
mapper位置报错Unknown column 'user_id' in 'where clause' 可能是数据库中的字段user_id包含空格
- 洛谷 1552 [APIO2012]派遣
题目背景 在一个忍者的帮派里,一些忍者们被选中派遣给顾客,然后依据自己的工作获取报偿. 题目描述 在这个帮派里,有一名忍者被称之为Master.除了Master以外,每名忍者都有且仅有一个上级.为保密 ...
- vue中图片放大镜功能
仿淘宝详情页图片鼠标移过去可对图片放大显示在右侧 效果图如下图,此功能支持PC端与移动端 接下来进入代码实现环节: 先准备两张图片,一张小图片叫 '土味.jpg',大小160*91:一张大图片叫 ' ...
- 用 Sphinx 搭建博客时,如何自定义插件?
之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建. 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清 ...
- CTF-SSH私钥泄露渗透
环境 Kali ip 192.168.56.102 Smb 靶机ip 192.168.56.104 0x01信息探测 使用netdiscover -r ip/mask 进行内网网段存活ip探测 靶机为 ...
- Canvas动画基础之碰撞检测
在Canvas中进行碰撞检测,大家往往直接采用游戏引擎(Cocos2d-JS.Egret)或物理引擎(Box2D)内置的碰撞检测功能,好奇的你有思考过它们的内部运行机制吗?下面将针对基本的碰撞检测技术 ...
- 对比 Git 与 SVN
一.Git vs SVN Git 和 SVN 孰优孰好,每个人有不同的体验. Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别.若能掌握这个概念,两者区别基本搞懂大半.因为 G ...
- 数据结构1_java---单链表的操作,约瑟夫问题
我们经常实用c++来建立链表,为了学习的方便,此处我使用java实现了对链表的增删改查功能 整个过程较为简单.仅供参考 流程: (1)通过内部类Node建立结点,内部变量作为指针域和数据域,并写下构造 ...