package linkedlist;
public class Josepfu {
public static void main(String[] args) {
//构建环形链表
CircleSinglelinkedList circleSinglelinkedList = new CircleSinglelinkedList();
circleSinglelinkedList.addBoy(5);
// circleSinglelinkedList.showBoy();
circleSinglelinkedList.outBoy(1, 2, 5);
}
}
//创建环形单向链表
class CircleSinglelinkedList{
//第一个小孩
private Boy first=new Boy(0);
//添加小孩节点构成环形链表
public void addBoy(int nums){
//数据校验
if (nums<1){
System.out.println("至少需要一个节点nums值不正确");
return;
}
Boy curBoy=null;//辅助指针
//创建环形链表
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 void showBoy(){
//链表是否为空
if (first==null){
System.out.println("链表为空");
return;
}
// 因为first不能动所有使用辅助指针
Boy curBoy=first;
while (true){
System.out.printf("小孩的编号%d n",curBoy.getNo());
if (curBoy.getNext()==first){
System.out.println("遍历完毕");
break;
}
curBoy=curBoy.getNext();
}
}
public void outBoy(int startNo,int countNum,int nums){
if (startNo<1||countNum>nums||countNum<1){
System.out.println("输入数据不符合要求,请重新输入");
return;
}
Boy helper=first;//创建和helper指针
//保证helper的下一个节点是first
while (true){
if (helper.getNext()==first){
break;
}
helper=helper.getNext();
}
//通过数的次数-1找到最后找到开始数的地方
for (int j=0;j