package linkList;
/**
* @Author zhw
* Version 1.0
* @Description JosephTest 解决约瑟夫问题
* Date 2021/8/14 18:00
**/
public class JosephTest {
//结点类
private static class Node<T> {
//存储数据
T item;
//下一个结点
Node next;
public Node(T item, Node next) {
this.item = item;
this.next = next;
}
}
public static void main(String[] args) {
//用来记录首节点
Node<Integer> first=null;
//用来记录前一个节点
Node<Integer> pre=null;
for(int i = 1;i<=41;i++){
//如果是第一个节点
if(i==1){
first=new Node<>(i,null);
pre=first;
continue;
}
//如果不是第一个节点
Node<Integer> node=new Node<>(i,null);
pre.next=node;
pre=node;
//如果是最后一个节点,指向首节点,变为循环链表
if (i==41){
pre.next=first;
}
}
//需要count计数器,模拟报数
int count=0;
//遍历循环链表
//记录每次遍历拿到的节点,默认首节点开始
Node<Integer> n=first;
//记录当前节点的上一个节点
pre=null;
while (n!=n.next){
//模拟报数
count++;
//判断当前报数是否为3
if (count==3){
//如果为3,则把当前节点删除,打印当前节点,count=0,当前节点后移
pre.next=n.next;
System.out.print(n.item+" ");
count=0;
}else {
//如果不是3,让pre变为当前节点,让当前节点后移
pre=n;
}
n=n.next;
}
System.out.println("");
//打印最后一个元素
System.out.println(n.item+" ");
}
}
03-10
04-12
646
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-26
03-19
2298
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)