public class Josephu { public static void main(String[] args) { Cyclink cyclink=new Cyclink(); cyclink.setLen(5); cyclink.createLink(); //cyclink.show(); cyclink.setK(2); cyclink.setM(2); cyclink.play(); } } class Child{ int no; Child nextChild=null; Child(int no){ this.no=no; } } class Cyclink{ //先定义指向链表对第一个小孩的引用 //指向第一个小孩的引用 不能动,所以需要定义游标 Child firstChild=null; Child temp=null; int len=0;//共有0个人入圈 int k=0; int m=0; public void play(){ Child temp=this.firstChild; for(int i=1;i<k;i++){ temp=temp.nextChild; } while(len!=1){ for(int j=1;j<m;j++){ temp=temp.nextChild; } Child temp2=temp; while(temp2.nextChild!=temp){ temp2=temp2.nextChild; } temp2.nextChild=temp.nextChild; temp=temp.nextChild; this.len--; } System.out.println(temp.no); } public void setK(int k){ this.k=k; } public void setM(int m){ this.m=m; } public void setLen(int len){ this.len=len; } public void createLink(){ for(int i=1;i<=len;i++){ if (i==1) { //创建第一个小孩 Child ch=new Child(i); firstChild = ch; this.temp = ch; } else { if(i==len){ Child ch=new Child(i); temp.nextChild=ch; temp=ch; temp.nextChild=this.firstChild; } else{ Child ch = new Child(i); temp.nextChild = ch; temp = ch; } } } } public void show(){ Child temp=this.firstChild; do{ System.out.print(temp.no+" "); temp=temp.nextChild; }while(temp!=this.firstChild); } }