package ccnu;
public class Demo06 {
public static void main(String[] args) {
Node head = magician(13);
Node p = head;
while(p.next != head){
System.out.print(p.data + " ");
p = p.next;
}
System.out.println(p.data);
}
public static Node initLinkList(int n){
if(n <= 0){
return null;
}
Node head = new Node();
int i = 2;
Node rear = head;
while(i <= n){
Node tmp = new Node();
rear.next = tmp;
rear = tmp;
i++;
}
rear.next = head;
return head;
}
public static Node magician(int n){
if(n <= 0){
return null;
}
Node head = initLinkList(n);
Node p = head;
head.data = 1;
int cardNums = 2;
while(cardNums <= n){
for(int i = 1; i <= cardNums; i++){
p = p.next;
if(p.data != 0){
i--;
}
}
p.data = cardNums;
cardNums++;
}
return head;
}
private static class Node{
private int data;
private Node next = null;
public Node(){
this(0);
}
public Node(int data){
this.data = data;
}
}
}