注释很详细,直接上代码:
public class Josephus {
public static int N=20;public static int M=5;//数到M就咔嚓一个人//结点class Node{
int val;//下标Node next;public Node(int val){
this.val=val;}}public void killNode(){
Node header=new Node(1);//第一个节点Node x=header;//目前被点到的人//环形链表的初始化for(int i=2;i<=N;i++){
x = (x.next=new Node(i));}x.next= header;//头尾相接System.out.println("被咔嚓的顺序为:");while(x != x.next){
//由于是环形链表,因此只要x.next不指向x,就说明至少还有俩节点//至少还有俩人,仍然继续报数,咔嚓for(int i=1;i<M;i++){
x=x.next;}System.out.println(x.next.val+"被干掉! ");x.next = x.next.next;}System.out.println();System.out.println("最后这个幸运儿是: "+x.val);}public static void main(String[] args) {
Josephus josephus=new Josephus(); josephus.killNode();}
}