// 单向环形链表的创建和约瑟夫问题 public class Joseph { public static void main(String[] args) { SingleCircleList scl = new SingleCircleList(); scl.add(5); scl.Joseph(1,2,5); } } class SingleCircleList{ // 单向环形链表的创建 Node2 first = null; // 创建头节点,用于指向链表的第一个元素 public void add(int num){ // 接收一个数值,表示添加几个节点 if(num < 1){ return; } Node2 temp = null; // 辅助指针节点 for (int i = 1; i <= num; i++) { Node2 node = new Node2(i); // 当添加的是第一个节点时,将它的 next指向自己,形成环状 if(i == 1){ first = node; first.next = first; temp = first; // 辅助指针指向第一个节点,后面用辅助指针帮助创建链表,first不动 }else{ temp.next = node; // temp 始终指向链表的最后一个节点, next指向新节点,先将新节点加入链表 node.next = first; // 新节点的 next 指向第一个first,形成环状 temp = node; // temp 后移 } } } // 遍历当前环形链表 public void show(){