public class Josepfu {
public static void main(String[] args) {
CircleLinked test=new CircleLinked();
test.add(5);
test.show();
test.count(1, 3, 5);
}
}
class CircleLinked {
CircleArray first = null;
public void add(int num) {
CircleArray cur = null;
for (int i = 1; i <= num; i++) {
CircleArray temp=new CircleArray(i);
if(i==1) {
first=temp;
first.setNext(first);
cur=first;
// System.out.println(first);
}else {
cur.setNext(temp);
temp.setNext(first);
cur=temp;
}
}
}
public void show() {
if (first == null) {
System.out.println("链表为空,请添加数据");
return ;
}
CircleArray temp = first;
while (true) {
System.out.printf("小孩的编号 %d \n", temp.getNo());
if (temp.getNext() == first) {
break;
}
temp = temp.getNext();
}
}
public void count(int startnum,int count,int num) {
CircleArray temp=first;
while(true) {
if(temp.getNext()==first) {
break;
}
temp=temp.getNext();
}
while(first.getNo()!=startnum) {
first=first.getNext();
temp=temp.getNext();
}
while(true) {
if (first.getNo()==temp.getNo()) {
break;
}
for (int i = 0; i < count-1; i++) {
first=first.getNext();
temp=temp.getNext();
}
System.out.println("第"+first.getNo()+"号小孩出局");
first=first.getNext();
temp.setNext(first);
}
System.out.println("幸存者是"+first.getNo()+"号小孩");
}
}
class CircleArray {
private int no;
private int value;
private CircleArray next;
public CircleArray(int no) {
this.no = no;
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public CircleArray getNext() {
return next;
}
public void setNext(CircleArray next) {
this.next = next;
}
@Override
public String toString() {
return "CircleArray [no=" + no + "]";
}
}