约瑟夫问题
image.png
首先这个问题我们可以很清楚的看出来,可以使用单向环形队列的数据结构来代入这个问题。
我先来分析一下这道题的思路:
第一步,确定是单向环形链表后,我们需要先构建这样一个数据结构,
由于每个人的最后都出列后,这个队伍中的人数为0,因此我们不需要设置头节点,比较简便。所以我们先构建一个,包含编号、指向下一个节点的类。
class Baby{
//编号
private int no;
//指向下一个节点
private Baby next;
//get\set....
}
2.队列有了,那么我们第二部,就需要普通的数据结构都需要有的基本方法,遍历,新增,修改,删除。。。根据题意,只需要遍历(用于测试)还有新增,就足够了。所以我们在新建一个内部类,把该单向环形链表作为私有类,写一些常用方法来操作它。
class CircleSingleLinkedList{
//创建一个fist节点
private Baby first=new Baby(-1);
//添加一个小孩,构建一个环形链表
public void addBaby(int nums){
//nums 代表要添加几个小孩
if(nums<1){