package 数据结构.链表;
import java.sql.SQLOutput;/**
* Created with IntelliJ IDEA.
*
* @Author: 你的名字
* @Date: 2021/09/04/16:39
* @Description:
*/
public class Josephu {
public staticvoidmain(String[] args){
CircleSingleList list = new CircleSingleList();
list.addBoy(5);
list.showBoy();
System.out.println("==================");
list.countBoy(1,2,5);}}
class CircleSingleList{//创建一个first节点
private Boy first=new Boy(-1);//添加小孩节点,构建一个环形链表
public voidaddBoy(int nums){if(nums<1){
System.out.println("nums的值不正确!|");return;}
Boy curBoy=null;//利用for循环创建环形链表for(int i =1; i <=nums ; i++){
Boy boy=new Boy(i);//如果是第一个小孩if(i==1){
first=boy;
first.setNext(first);
curBoy=first;}else{
curBoy.setNext(boy);
boy.setNext(first);
curBoy=boy;}}}
public voidshowBoy(){if(first==null){
System.out.println("没有小孩!");return;}
Boy curBoy=first;while(true){
System.out.printf("小孩的编号%d \n",curBoy.getNo());if(curBoy.getNext()==first){break;}
curBoy=curBoy.getNext();}}
public voidcountBoy(int startNo,int countNum,int nums){if(first==null || startNo>countNum || startNo<1){
System.out.println("数据有误!!!");return;}
Boy helper=first;while(true){if(helper.getNext()==first){break;}
helper=helper.getNext();}for(int i =0; i <startNo-1; i++){
helper=helper.getNext();
first=first.getNext();}while(true){if(helper==first){
System.out.println("圈中只有一个人");break;}for(int i =0; i <countNum-1; i++){
helper=helper.getNext();
first=first.getNext();}
System.out.printf("小孩子%d出圈 \n",first.getNo());
first=first.getNext();
helper.setNext(first);}
System.out.printf("最后留在圈中的小孩是%d \n",first.getNo());}}
class Boy{
private int no;
private Boy next;
public Boy(int no){
this.no=no;}
public intgetNo(){return no;}
public voidsetNo(int no){
this.no = no;}
public Boy getNext(){return next;}
public voidsetNext(Boy next){
this.next = next;}}