数据结构:单向环形链表
约瑟夫问题
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;}
}
数据结构:单向环形链表相关推荐
- (数据结构与算法)单向环形链表解决约瑟夫问题
约瑟夫(Josephu)问题 Josephu问题为: 设编号为1, 2,- n的n个人围坐一圈,约定编号为k (1<=k<=n) 的人从1开始报数,数到m的那个人出列,它的下一位又从1开始 ...
- 五、单向环形链表---实现约瑟夫(Josephu)问题
使用单向环形链表实现约瑟夫(Josephu)问题 1.约瑟夫(Josephu)问题描述 Josephu 问题为:设编号为 1,2,- n 的 n 个人围坐一圈,约定编号为 k(1<=k<= ...
- 简洁明了!Java实现单向环形链表以解决约瑟夫环Josepfu问题
文章目录 简单介绍 代码实现 简单介绍 如果把单链表的最后一个节点的指针指向链表头部,而不是指向NULL,那么就构成了一个单向循环链表,通俗讲就是让尾节点指向头结点. 单向环形链表应用场景:Josep ...
- 数据结构 - 链表(单向环形链表)(约瑟夫问题)
问题如下(与分析) 构建思路 输入一个数,数到这个数的小孩出圈,出圈顺序的思路 代码实现 根据图解,来一步一步实现 //根据用户输入,计算小孩出圈顺序/**** @param startNo 表示从第 ...
- 图解Java数据结构之环形链表
本篇文章介绍数据结构中的环形链表. 介绍 环形链表,类似于单链表,也是一种链式存储结构,环形链表由单链表演化过来.单链表的最后一个结点的链域指向NULL,而环形链表的建立,不要专门的头结点,让最后一个 ...
- 约瑟夫(环)问题(Josephu)(单向环形链表)
问题描述 代码实现 package com.atguigu.linkedlist;import com.sun.org.apache.bcel.internal.generic.NEW;/*** @创 ...
- (四)数据结构与算法-链表
链表介绍 链表是有序的列表,但是它在内存中存储如下: 链表是以节点的方式来存储 每个节点包含data域,next域:指向下一个节点 如图:发现链表的各个节点不一定是连续存储 链表分带头节点的链表和没有 ...
- 牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案
牛客题霸 [ 环形链表的约瑟夫问题] C++题解/答案 题目描述 据说著名犹太历史学家 Josephus 有过以下故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus 及他的朋友躲到一个洞 ...
- 链表(Linked List)之环形链表
原文地址:传送门 单向环形链表应用场景 Josephu(约瑟夫.约瑟夫环) 问题 Josephu 问题为:设编号为1,2,- n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始 ...
最新文章
- kubernetes apiserver认证
- 网络分流器-网络分流器的应用领域
- JZOJ5776. 【NOIP2008模拟】小x游世界树
- javascript 实现单击和双击并存
- nginx同一域名下部署多个vue项目
- React Native常用组件之ListView组件
- 程序员究竟还需要读书么?
- 1.WebServices 简介
- Python-Spyder中文包正式发布!
- 【项目知识点】Vue中实现扫描二维码获取信息
- linux打印机驱动教程视频,Linux打印机配置wmv视频教程
- keras python3.7_主页 - Keras 中文文档
- 使用linux批量引物设计,使用SSRMMD便捷、迅速与准确地进行:SSR位点检测,多态性SSR筛选,与批量SSR引物设计...
- unity连接mysql数据库-最新详细
- SQL语句实现模糊查询
- linux查ip出现fe80,ubuntu IP出现inet6 addr :fe80::20c:29ff:fe47:fd61/64 scope:l
- Jetson部署实践
- STM32学习记录0002-STM32初探
- 通过WHQL认证的产品可以在微软官网查询了
- 教育培训机构的信息化管理,要先从这四大业务场景做起