用JAVA代码实现一个约瑟夫环
题目要求:
设n个人围成一个圈,约定第一个人开始从1报数,每次叫到m的那个人出列,然后下一个从1继续报数,问该环出列的顺序是?
思路: 主要考察数据结构,用一个环形单链表就可以解决问题。
JAVA代码
public static void JosephuCircle(int n, int m) {
List list = new List();
for(int i = 1; i <= n; i++) {
list.add(new ListNode(i));
}
ListNode temp = list.head;
int c = 1;
while(list.head.next != null) {
while(c++ < m) {
temp = temp.next;
if(temp == null) {
temp = list.head;
}
}
System.out.print(temp.val + " ");
if(temp == list.head) {
list.head = list.head.next;
temp = list.head;
}
else {
ListNode ptr = list.head;
while(ptr.next != null) {
if(ptr.next == temp) {
ptr.next = ptr.next.next;
if(ptr.next == null) temp = list.head;
else temp = ptr.next;
break;
}
ptr = ptr.next;
}
}
c = 1;
}
System.out.print(list.head.val);
}