约瑟夫问题

public class Josephus {public static void main(String[] args){SingleCircleLinkedList single = new SingleCircleLinkedList();single.addBoyNode(5);single.showNodes();single.countNode(1, 2, 5);}
}class SingleCircleLinkedList{// 创建first节点private BoyNode first = null;public void addBoyNode(int nums){if(nums < 1){System.out.println("nums的值不正确");return;}BoyNode temp = null; // 辅助节点for(int i=1;i<=nums;i++){BoyNode bn = new BoyNode(i);if(i == 1){first = bn;first.setNext(first);temp = first;}else{temp.setNext(bn);bn.setNext(first);temp = bn;}}}// 遍历当前环形链表public void showNodes(){if(null == first){return;}BoyNode temp = first;do{System.out.println(temp.getNo());temp = temp.getNext();}while(first != temp);}/*** startNo:从哪个位置开始数* countNum 数几次* nums:一共几个人 */public void countNode(int startNo, int countNum, int nums){if(null == first || startNo<1 || startNo>nums){System.out.println("参数输入有误,请重新输入");return;}BoyNode helper = first;//辅助节点while(true){if(helper.getNext() == first){break;}helper = helper.getNext();}for(int j=0; j<startNo-1;j++){first = first.getNext();helper = helper.getNext();}// 同时移动first,helper m-1次while(true){// 圈中只有一个人if(first == helper){break;}for(int j=0;j<countNum-1;j++){first = first.getNext();helper = helper.getNext();}System.out.printf("小孩%d出圈!",first.getNo());// 让first指向的小孩节点出圈first = first.getNext();helper.setNext(first);}System.out.printf("最后的小孩%d出圈!",first.getNo());}
}class BoyNode{private int no;private BoyNode next;public int getNo() {return no;}public void setNo(int no) {this.no = no;}public BoyNode getNext() {return next;}public void setNext(BoyNode next) {this.next = next;}public BoyNode(int no){this.no = no;}
}

数据结构:单向环形链表相关推荐

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

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

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

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

  3. 简洁明了!Java实现单向环形链表以解决约瑟夫环Josepfu问题

    文章目录 简单介绍 代码实现 简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点. 单向环形链表应用场景:Josep ...

  4. 数据结构 - 链表(单向环形链表)(约瑟夫问题)

    问题如下(与分析) 构建思路 输入一个数,数到这个数的小孩出圈,出圈顺序的思路 代码实现 根据图解,来一步一步实现 //根据用户输入,计算小孩出圈顺序/**** @param startNo 表示从第 ...

  5. 图解Java数据结构之环形链表

    本篇文章介绍数据结构中的环形链表. 介绍 环形链表,类似于单链表,也是一种链式存储结构,环形链表由单链表演化过来.单链表的最后一个结点的链域指向NULL,而环形链表的建立,不要专门的头结点,让最后一个 ...

  6. 约瑟夫(环)问题(Josephu)(单向环形链表)

    问题描述 代码实现 package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** @创 ...

  7. (四)数据结构与算法-链表

    链表介绍 链表是有序的列表,但是它在内存中存储如下: 链表是以节点的方式来存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带头节点的链表和没有 ...

  8. 牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案

    牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案 题目描述 据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞 ...

  9. 链表(Linked List)之环形链表

    原文地址:传送门 单向环形链表应用场景 Josephu(约瑟夫.约瑟夫环) 问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始 ...

最新文章

  1. kubernetes apiserver认证
  2. 网络分流器-网络分流器的应用领域
  3. JZOJ5776. 【NOIP2008模拟】小x游世界树
  4. javascript 实现单击和双击并存
  5. nginx同一域名下部署多个vue项目
  6. React Native常用组件之ListView组件
  7. 程序员究竟还需要读书么?
  8. 1.WebServices 简介
  9. Python-Spyder中文包正式发布!
  10. 【项目知识点】Vue中实现扫描二维码获取信息
  11. linux打印机驱动教程视频,Linux打印机配置wmv视频教程
  12. keras python3.7_主页 - Keras 中文文档
  13. 使用linux批量引物设计,使用SSRMMD便捷、迅速与准确地进行:SSR位点检测,多态性SSR筛选,与批量SSR引物设计...
  14. unity连接mysql数据库-最新详细
  15. SQL语句实现模糊查询
  16. linux查ip出现fe80,ubuntu IP出现inet6 addr :fe80::20c:29ff:fe47:fd61/64 scope:l
  17. Jetson部署实践
  18. STM32学习记录0002-STM32初探
  19. 通过WHQL认证的产品可以在微软官网查询了
  20. 教育培训机构的信息化管理,要先从这四大业务场景做起

热门文章

  1. 在当前进程下取得当前登陆用户
  2. ActiveX中添加对话框并显示
  3. Hyperic HQ HQU 插件开发指南
  4. Windows Phone 7 多点触摸编程
  5. Python面试必知(四)
  6. vue2.0中引入wangEditor2 步骤与坑
  7. OGG目标端复制Sequence时Hang住的问题
  8. SQL 百万级别记录优化之 -- 单引号带来的性能下降
  9. p3p-header解决跨域访问cookie
  10. 确保独立计算机上的EFS加密数据恢复