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 用单向循环链表实现 约瑟夫问题的更多相关文章

  1. 关于单向循环链表的约瑟夫问题(Java实现)

    关于单向循环链表的约瑟夫问题(Java实现) 最近在学习链表时,遇到单向循环链表中的约瑟夫问题.在构建循环链表的代码上,我有一点很不理解,遂记录下来. Josephu问题为: 设编号为1, 2,.. ...

  2. (java实现)单向循环链表

    什么是单向循环链表 单向循环链表基本与单向链表相同,唯一的区别就是单向循环链表的尾节点指向的不是null,而是头节点(注意:不是头指针). 因此,单向循环链表的任何节点的下一部分都不存在NULL值. ...

  3. java实现单向循环链表

    链表图解 带头结点的链表: 不带头结点的链表: 区别 带头结点的链表容易代码实现 不带头结点的容易实现循环链表和双向链表 代码的实现 (增减 删除) 节点实现: public class node { ...

  4. C语言单向循环链表解决约瑟夫问题

    据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,4 ...

  5. 使用java的循环单向链表解决约瑟夫问题

    什么是约瑟夫问题 据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定 ...

  6. java与数据结构(4)---java实现双向循环链表

    线性表之链式存储结构双向循环链表 双向循环链表:每个结点包含了数据.直接前驱地址指针和直接后驱地址指针,头结点的直接前驱指向尾结点,尾结点的直接后驱指向头结点,头尾相连构成一个可正可反的圆环.可以形象 ...

  7. JS数据结构第三篇---双向链表和循环链表之约瑟夫问题

    一.双向链表 在上文<JS数据结构第二篇---链表>中描述的是单向链表.单向链表是指每个节点都存有指向下一个节点的地址,双向链表则是在单向链表的基础上,给每个节点增加一个指向上一个节点的地 ...

  8. (java实现)双向循环链表

    什么是双向循环链表 在了解双向循环链表之前,如果对链表还没有一个清晰的概念,建议你看看单链表和单向循环链表,这有利于你更好的理解下面的内容.(废话有点多[逃] 相比单链表,双向循环链表是一个更加复杂的 ...

  9. PTA 6-15 用单向循环链表实现猴子选大王 (20 分)

    一群猴子要选新猴王.新猴王的选择方法是:让n只候选猴子围成一圈,从某位置起顺序编号为1~n号.每只猴子预先设定一个数(或称定数),用最后一只猴子的定数d,从第一只猴子开始报数,报到d的猴子即退出圈子: ...

随机推荐

  1. S2-052 漏洞复现

    Structs2框架已知的漏洞编号如下: S2-005 S2-009 S2-016 (含S2-013) S2-019 S2-020 S2-021 S2-032 S2-037(含S2-033) DevM ...

  2. tiki-graph_formula.php代码执行漏洞复现(或许??)

    1.不知道从哪里翻出来的虚拟机镜像(不知道甚么时候出现在磁盘里面的) 打开配置一下是tikiwiki这个东西 2.遇到陌生的玩意总是忍不住好奇心的,打开nikto扫描一下,发现有些奇怪的东西 本来没抱 ...

  3. php有关数据推荐

    # PHP<PHP程序设计>(第2版)  --PHP语法和入门最好的书<PHP5权威编程>  --PHP入门后升级书<深入PHP:面向对象.模式与实践>(第3版) ...

  4. 【Java基础】Java中的语法糖

    目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...

  5. 在Linux环境下采用压缩包方式安装JDK 13

    本文地址:https://www.cnblogs.com/oberon-zjt0806/p/11663731.html 可以,转载,出处,格式,懂?? 什么是JDK?? 好吧如果你不知道这个问题的话我 ...

  6. 项目二:企业级java电商网站开发(服务端)

    声明:项目源于网络,支持正版教程,学习使用,仅记录在此 项目介绍 企业级java电商网站开发(服务端),模块划分:用户管理,商品管理,商品品类管理,订单管理,订单详情管理,购物车管理,收货地址管理,支 ...

  7. VPGAME 的 Kubernetes 迁移实践

    作者 | 伍冲斌  VPGAME 运维开发工程师 导读:VPGAME 是集赛事运营.媒体资讯.大数据分析.玩家社群.游戏周边等为一体的综合电竞服务平台.总部位于中国杭州,在上海和美国西雅图分别设立了电 ...

  8. C# 委托 (一)—— 委托、 泛型委托与Lambda表达式

    C# 委托 (一)—— 委托. 泛型委托与Lambda表达式 2018年08月19日 20:46:47 wnvalentin 阅读数 2992   版权声明:此文乃博主之原创.鄙人才疏,望大侠斧正.此 ...

  9. [HDU5001]Walk

    Problem Description I used to think I could be anything, but now I know that I couldn't do anything. ...

  10. composer依赖管理与laravel框架安装

    步骤有点多,生怕哪一天忘记,记录下来会好点 laravel安装有两种途径:1.直接在一些国内第三方网站,如:https://www.golaravel.com/download/ 下载压缩包来解压即可 ...