1、问题描述
**设编号为1,2,……,n(n>0)的n 个人按顺时针方向围坐一个圆圈,从第1 个人开始顺时针方向自1起顺序报数,报数到 m 为止,报数为 m 的人出列,然后从他的下一个人开始重新报数,报数为 m 的人又出列,……,直到所有的人全部出列为止。设计算法求n个人出圈的次序。
2、基本要求
(1)采用不带头结点的循环链表作为存储结构。
(2)对任意n个人,密码m,实现约瑟夫问题。
(3)出圈人员的编号依次输出。
=============================================================
思路
- 根据对应的人数创建对应的循环链表,其实循环链表只需在其最后那个节点的下一个节点在指向头结点的下一个节点即可,这样便可以去掉头结点
- 根据循环的次数来拿出对应的序号,同时删除对应在链表中存在的序号(即指向下一个的再下一个即可)
代码如下
1.创建Node类
public class Node {
public Object data;//存放结点值
public Node next;//后继结点的引用
//无参数的构造函数
public Node(){
this(null,null);
}
//带一个参数时的构造函数
public Node(Object data){
this(data,null);
}
//带两个参数时的构造函数
public Node(Object data,Node next){
this.data