完整代码实例-Java单向循环链表解决约瑟夫问题
约瑟夫问题:
N个人围成一个环,选取一个正整数M(<n)作为报数值。从第一个人开始按顺时针方向自1开始顺序报数,
报到m停止报数,报m的出列,下一个继续开始重新报数,直到环中只剩下一个为最后的优胜者。
完整代码实现:
package DataStrcture.ArrayDemo.circlesinglelistdemo;
public class Josephus{
//结点内部类
static class Node{
Node next;
int num;
public Node(int num){
this.num = num;
}
public String toString(){
return ""+num;
}
}
public static void main(String[] args) {
//N,环内总人数, M,报数间隔
int N=41;
int M=3;
///头结点和临时结点
Node head = new Node(1);
Node temp = head;
//新建结点
for(int i=2; i<=N; i++){
temp.next = new Node(i);
temp = temp.next;
}
//组成单向循环链表
temp.next = head;
//开始报数了
System.out.print("出环顺序: ");
while(true){
for(int i=1; i<M; i++){
temp = temp.next;//报数完毕后, temp.next的这个节点是要出环的结点
}
System.out.print(temp.next.num+" ");
//开始去除这个节点
temp.next = temp.next.next;
//什么时候是个头? 当然是只剩下一个结点的时候咯
if(temp.next == temp){
break;
}
}
System.out.println();
System.out.println("幸存结点为: "+ temp.num);
}
}
运行结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)