JosephCircle约瑟夫环问题
- 问题:设编号为1,2,…n的n个人围坐在一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列,以此类推,直到所有人出列为止,由此产生一个出队编号的序列。
- 思路:用一个不带头结点的循环链表来处理约瑟夫问题。
- 先构成一个有n个结点的循环单链表。
- 由k结点起从1开始计数,计到m时,对应结点从链表中删除。
- 再从被删除结点的下一个结点开始从1计数,知道最后一个结点从链表中删除,算法结束。
package com.linkedlist;
public class JosephCircle {
public static void main(String[] args) {
CircleSingleLinkedList list = new CircleSingleLinkedList();
list.addChild(5);
list.countChild(1,2,5);
}
}
class CircleSingleLinkedList{
Child first = null;
public void addChild(int nums) {
if (nums < 1) {
System.out