直接上代码:
package 约瑟夫环;
class node {
public int data;
public node next;
public node(int data) {
// TODO 自动生成的构造函数存根
this.data = data;
this.next = null;
}
}
class link {
public node head;
public int leng;
public link(int headValue) {
// TODO 自动生成的构造函数存根
this.head = new node(headValue);
leng = 1;
}
//在最后插入
public void insertEnd(int value) {
node nowNode = head;
while (nowNode.next != null) {
nowNode = nowNode.next;
}
node insertNode = new node(value);
nowNode.next = insertNode;
}
//成环
public void becomeHuan() {
node nownode = head;
while(nownode.next != null) {
nownode = nownode.next;
}
nownode.next = head;
}
}
public class 约瑟夫环 {
static int peopleNumber = 20;//总人数
static int interval = 3;//间隔
public static void main(String[] args) {
link yuesefu = new link(1);
for (int i = 2; i <= peopleNumber; i++) {
yuesefu.insertEnd(i);
}
//配成一个环
yuesefu.becomeHuan();
node now = yuesefu.head;
while(now.next != now) {
int k = interval;
while (--k != 1) {
now = now.next;
}
now.next = now.next.next;
now = now.next;
}
System.out.println(now.data);
}
}