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的猴子即退出圈子: ...
随机推荐
- nslookup的基本使用
nslookup的基本使用 nslookup:name server lookup 用来查询DNS的. 1:安装nslookup命令 [root@localhost ~]# yum install b ...
- 夯实Java基础系列13:深入理解Java中的泛型
目录 泛型概述 一个栗子 特性 泛型的使用方式 泛型类 泛型接口 泛型通配符 泛型方法 泛型方法的基本用法 类中的泛型方法 泛型方法与可变参数 静态方法与泛型 泛型方法总结 泛型上下边界 泛型常见面试 ...
- Mybatis基础知识点
1. Mybatis框架优缺点 优点: 1. 易于上手和掌握. 2. sql写在xml里,便于统一管理和优化. 3. 解除sql与程序代码的耦合. 4. 提供映射标签,支持对象与数据库的orm字段关系 ...
- Shell之StdI/O和Pipe
目录 Shell之StdI/O和Pipe 参考 StdI/O重定向 Pipe 常用组合 Shell之StdI/O和Pipe
- Linux入门(磁盘与挂载)
Linux入门之 磁盘管理与挂载 在我们使用计算机或者是服务器时,总会需要接入外部存储的时候,正如我们使用的移动硬盘.U盘.接入手机等,就是一个接入外部存储的过程.上述这些在接入Windows时我 ...
- Paid Roads POJ - 3411
A network of m roads connects N cities (numbered from 1 to N). There may be more than one road conne ...
- 【DP合集】m-knapsack
给出 n 个物品,第 i 个物品有重量 w i .现在有 m 个背包,第 i 个背包的限重为 c i ,求最少用几个背 包能装下所有的物品. Input 输入的第一行两个整数 n, m ( n ≤ 2 ...
- 开发 Django 博客文章阅读量统计功能
作者:HelloGitHub-追梦人物 文中所涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 如何精确地记录一篇文章的阅读量是一个比较复杂的问题,不过对于我们的博客来说,没有必要 ...
- C语言打印当前所在函数名、文件名、行号
printf("[%s %s] %s: %s: %d\n", \ __DATE__, __TIME__, __FILE__, __func__, __LINE__); 内核驱动中: ...
- Cymothoa后门工具
Cymothoa是一款隐秘的后门工具. 发现网上对于Cymothoa的文章并不是很多,可是Cymothoa又是一款非常强大的后门工具,这里记录下Cymothoa的使用笔记. Cymothoa 是一款可 ...