链表OJ—环形链表的约瑟夫问题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

世上有两种耀眼的光芒,一种是正在升起的太阳,一种是正在努力学习编程的你!一个爱学编程的人。各位看官,我衷心的希望这篇博客能对你们有所帮助,同时也希望各位看官能对我的文章给与点评,希望我们能够携手共同促进进步,在编程的道路上越走越远!


提示:以下是本篇文章正文内容,下面案例可供参考

1、环形链表的约瑟夫题目:

著名的Josephus问题

据说著名犹太 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与 Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。

然而Josephus 和他的朋友并不想遵从,Josephus要他的朋友先假装遵从,他将朋友与自己安排在第16个与第31个位置,于是逃过了这场死亡游戏。

代码演示:

cs 复制代码
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @param m int整型 
 * @return int整型
 */
 typedef struct ListNode ListNode;
 //申请一个新的节点
 ListNode*ListBuyNode(int x)
 {
    ListNode*node = (ListNode*)malloc(sizeof(ListNode));
    if(node == NULL)
    {
        perror("malloc fail!");
        exit(1);
    }
    node->val = x;
    node->next = NULL;
    return node;
 }
 //创建带环链表
 ListNode*Greatelist(int n)
 {
    //创建链表
    ListNode*phead = ListBuyNode(1);
    ListNode*pTail = phead;
    for(int i=2;i<=n;i++)
    {
        ListNode*node = ListBuyNode(i);
        pTail->next = node;
        pTail = pTail->next;
    }
    //以上只是在创建单链表
    pTail->next = phead;
    return pTail;//有尾节点就能找到头节点,返回头节点的话还要遍历链表才能找到尾节点
 }
 //n:一共有几个人参加游戏
 //m:报数到m的人,自杀(节点释放)
int ysf(int n, int m ) {
    // 创建不带头的单向循环链表
    ListNode*prev = Greatelist(n);
    //对该链表进行约瑟夫游戏
    ListNode*cur = prev->next;//就是头节点
    int count = 1;//从1开始报数
    while(cur->next!=cur)
    {
        if(count == m)
        {
            //删除节点
            //前一个节点指向大后面的节点
            prev->next = cur->next;
            free(cur);
            cur = prev->next;
            count = 1;//从新开始从1报数
        }
        else {
        //继续往下报数
        prev = cur;
        cur = cur->next;
        count++;
        }
    }
    //此链表中只有一个节点
    return cur->val;
}

总结

好了,本篇博客到这里就结束了,如果有更好的观点,请及时留言,我会认真观看并学习。
不积硅步,无以至千里;不积小流,无以成江海。

相关推荐
alphaTao1 小时前
LeetCode 每日一题 2026/7/6-2026/7/12
算法·leetcode
想吃火锅10051 小时前
【leetcode】56.合并区间js
算法·leetcode·职场和发展
imuliuliang1 小时前
可合并堆在多任务调度中的优势与实现技巧7
算法
学究天人1 小时前
数学公理体系大全:Comprehensive Collection of Mathematical Axiom Systems(卷6)
网络·算法·数学建模·动态规划·几何学·图论·拓扑学
wabs6661 小时前
关于动态规划【力扣72.编辑距离的思考】
算法·leetcode·动态规划
用户333239768841 小时前
我做了一个 RepoMind:让 AI 写架构前,先去看看真实开源项目
算法
chh5632 小时前
C++--list
开发语言·数据结构·c++·学习·算法·list
killerbasd2 小时前
总结 7。10
人工智能·算法·机器学习
林间码客2 小时前
RAG系统评估指南:从入门到实践
人工智能·算法·机器学习
凌波粒2 小时前
LeetCode--47.全排列 II(回溯算法)
算法·leetcode·职场和发展