单项环形链表 约瑟夫环问题 设编号为1,2,3,...n的n个人围坐一圈,约定编号为k(1<=k<=n)的人从1开始报数,数到m的那个人出列,他的下一位又从1开始报数,数到m的那个人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。 思路: 用一个不带头结点的循环链表来处理约瑟夫问题:先构成一个有n个节点单项环形链表,然后由k节点起从1开始计数,到m时,把对应节点从链表中删除,然后再从被删除节点的下一个节点开始从1计数,知道最后一个节点从链表中删除算法结束。 代码示例: public class Josepfu { public static void main(String[] args) { SingleCircleLinkedList singleCircleLinkedList = new SingleCircleLinkedList(); singleCircleLinkedList.Josepfu(1, 2, 5); } } //创建单项环形链表 class SingleCircleLinkedList { //创建一个first节点,当前没有编号 private Node first; /** * @param nums 为环形链表添加几个节点 */ public void createSingleCircleLinkedList(int nums)