public void chuquan(int nums,int start,int k){ //nums:总人数;start:从第start号的小孩开始报 数;k:报几个数
if(first==null||start<1||start>nums) { //
System.out.println("重输");
}
Boy helper=first; //创建helper指针,让它指向最后节点
while(true) {
if(helper.getNext()==first) {
break;
}
helper=helper.getNext();
}
for(int i=0;i<start-1;i++) { //第start号小孩报数,first,helper移动start=1下
first=first.getNext();
helper=helper.getNext();
}
while(true) {
if(helper==first) { //最后圈里只剩一个小孩
break;
}
for(int j=0;j<k-1;j++) {
first=first.getNext();
helper=helper.getNext();
}
System.out.printf("%d小孩出圈\n",first.getNo());
first=first.getNext();
helper.setNext(first); //把first向下一个节点移动,使原first节点删除
}
System.out.println("最后留在圈里的是%d小孩");
}
结果:
nums=5,start=1,k=2
2小孩出圈
4小孩出圈
1小孩出圈
5小孩出圈
最后留在圈里的是3小孩