这个问题我们采取的做法是建立一个单向循环链表,然后做两个指针head和last。head总是在last的前面。当计数到m时就删除head指向的那个接点。
class Node{
public int node;
public Node next;
public Node(int node) {
this.node = node;
}
}
public class JosephusProblem {
public static void main(String[] args) {
Node head=null;
Node node=new Node(1);
head=node;
Node node1=new Node(2);
node.next=node1;
Node node2=new Node(3);
node1.next=node2;
Node node3=new Node(4);
node2.next=node3;
Node node4=new Node(5);
node3.next=node4;
node4.next=head;
int m=3;
Node s=josephusKill(head, m);
System.out.println(s.node);
}
private static Node josephusKill(Node head, int m) {
if (head==null||head.next==head||m<1) {
return head;
}
Node last=head;
while(last.next!=head){
last=last.next;
}
int count=0;
while(last!=head){
if (true) {
count+=1;
if (count==m) {
last.next=head.next;
count=0;
}else{
last=last.next;
}
head=last.next;
}
}
return head;
}
}