C语言/数据结构——每日一题(环形链表的约瑟夫问题)

news2024/12/27 15:02:36

一.前言

今天在牛客网上面看到了一道环形链表题,想着和大家们分享一下。可能我有点笨,那道题的链接我没搞好,所以很抱歉,只能麻烦大家们看一下截屏的题目信息了。废话不多数,让我们开始今天的题目分享吧。

二.正文

1.1题目描述

1.2题目解析

这是一道环形链表题。

本体虽然没有明确指出但是它默认结构体是:

struct ListNode
{
int val;
ListNode* next;
};

1. 而且这道题没有给你设置好哪怕一个节点,因此我们只能先通过先通过malloc函数自己创建节点。而创建一个环形链表就需要多个节点,为了方便后面使用,因此我写了一个函数BuyNode专门来创建节点。

newnode是我为了接受malloc开辟的那块节点空间的地址。

2. 上面提到我们想要创建一个环形,链表,因此需要多个节点做到首尾相连。为此我定义了一个BuyList函数来创建环形链表。

phead是我们一开始就建立的指向头节点的指针,ptail代表的是尾节点。因为开始ptai=phead(这代表着ptail和phead都指向头节点)

上面右边是左边代码的具现图。

值得注意的是如果没有把最后的尾节点ptail和我们的头节点phead相链接的话,最后具线图将会变成下面这个样子。(下面这个图是错误示范,上面的图才是我们想要的效果)

且该函数返回的是尾节点的地址,即节点5而不是1。这一点很重要!!

3. 主函数ysf函数中:我们用prev来接受BuyList传递的5节点指针。pcur是prev的下一个节点,初始pcur指向1节点。count是我们的计数变量,什么时候count==m,pcur代表的这个人就死掉了(代码中是free掉了)

如果count!=m,我们仅仅需要让prev指向pcur所在节点,以及pcur指向下一个节点,并让count++。

否则,即(count==m)那么prev将会指向pcur指向的下一个指针,并且pcur所指向的指针会被free掉,然后pcur指向prev指向的下一个节点。最后不要忘了让count=1重新计数。

依次循环直到不满足条件(pcur->next!=pcur)后,退出循环。

1.3代码实现

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @param m int整型 
 * @return int整型
 */
 typedef struct ListNode ListNode;
 ListNode* BuyNode(int x)
 {
    ListNode* newnode=(ListNode*)malloc(sizeof(ListNode));
    if(newnode==NULL)
    {
    return NULL;
    }
    else {
    newnode->next=NULL;
    newnode->val=x;
    return newnode;
    }

 }
 ListNode* BuyList(int n)
 {
    ListNode* phead=BuyNode(1);
ListNode* ptail=phead;
for(int i=2;i<=n;i++)
{
    ptail->next=BuyNode(i);
    ptail=ptail->next;
}
ptail->next=phead;
return ptail;
 }
int ysf(int n, int m ) 
{
    ListNode* prev=BuyList(n);
    ListNode* pcur=prev->next;
    int count=1;
    while((pcur->next)!=pcur)
    {
        if(count!=m)
        {
              prev=pcur;
            pcur=pcur->next;
            count++;
        }
        else {
          
             prev->next=pcur->next;
        free(pcur);
        pcur=prev->next;
        count=1;
        }
        }
        return pcur->val;
    }

值得注意的是:这是在牛客环境下运行的代码。

三.结文

今天的分享就到此结束了,帅哥美女们,我们下次再见,拜拜。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1640731.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论文笔记(四十五)Attention Is All You Need

Attention Is All You Need 文章概括摘要1. 介绍2. 背景3. 模型架构3.1 编码器和解码器堆栈3.2 Attention3.2.1 按比例点积Attention3.2.2 Multi-Head Attention3.2.3 注意力在模型中的应用 3.3 定位前馈网络3.4 嵌入与 Softmax3.5 位置编码 4 为什么 Self-Attention5. Trainin…

手撕vector的模拟实现

&#x1d649;&#x1d65e;&#x1d658;&#x1d65a;!!&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦&#x1f44f;&#x1f3fb;‧✧̣̥̇‧✦ &#x1f44f;&#x1f3fb;‧✧̣̥̇:Solitary_walk ⸝⋆ ━━━┓ - 个性标签 - &#xff1a;来于“云”的“羽球人”。…

Python梯度提升决策树库之lightgbm使用详解

概要 LightGBM是一个快速、分布式、高性能的梯度提升决策树(Gradient Boosting Decision Tree)库,它在机器学习和数据挖掘领域被广泛应用。本文将介绍LightGBM库的安装方法、主要特性、基本功能、高级功能、以及在实际应用中的场景和总结。 安装 首先,需要安装LightGBM库…

【doghead】ubuntu构建libuv

按照官方的文档2024年3月的版本。首先构建libuv 最终构建的还得了test 构建过程 zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/thunderbolt/ayame/zhb-bifrost$ ls Bifrost-202403 README.md draw player-only worker 大神的带宽估计.png zhangbin@DESKTOP-1723CM1:/mnt/d/XTRANS/…

python学习笔记B-20:序列实战--处理千年虫

将2位数表达的年份&#xff0c;转换为用4位数表达&#xff1a; print("将列表中的2位数年份转换为4位数年份") lst[88,89,90,00,99] print(lst) for index in range(len(lst)):if len(str(lst[index]))2:lst[index] 1900int(lst[index])elif len(str(lst[index]))1…

AI学习指南-人工智能概述

欢迎来到人工智能的奇妙世界&#xff01;如果你是初学者&#xff0c;那么你来对地方了。今天&#xff0c;我们将一起探索人工智能&#xff08;AI&#xff09;的基本概念&#xff0c;看看它是如何分类的&#xff0c;它的应用有哪些&#xff0c;以及未来可能的发展方向。准备好了…

7个策略,让你的可视化大屏打动人心!

要打动人心的可视化大屏&#xff0c;可以采取以下策略&#xff1a; 引人入目的设计&#xff1a; 选择鲜明而吸引人的颜色和视觉效果&#xff0c;使用引人注目的动画和过渡效果&#xff0c;以及吸引眼球的图形和图案设计。通过精心设计的布局和排版&#xff0c;确保信息清晰可…

vivado Aurora 8B/10B IP核(9)- CRC、 Aurora 8B/10B内核的时钟接口端口

CRC 模块提供 16 位或 32 位 CRC&#xff0c;用于用户数据。 Aurora 8B/10B 内核的时钟接口端口 从相邻收发器四边形的时钟Xilinx 实现工具可以根据需要对南北路由和引脚交换到收发器时钟输入进行必要的调整&#xff0c;以将时钟从一个四线到另一个。 重要信息&#xff1a;共…

HTML5实用大全(Part.2)

引言&#xff1a; 哈喽&#xff0c;各位小伙伴们大家好呀&#xff0c;学习了上一篇关于HTML5的文章后&#xff0c;你是否对于入门HTML5有了一定的基础了呢&#xff0c;本篇博客我们将继续学习HTML5的不同标签&#xff0c;跟上队伍&#xff0c;准备出发咯&#xff01; 1.标签之…

RMQ从入门到精通

一.概述与安装 //RabbitMQ //1.核心部分-高级部分-集群部分 //2.什么是MQ 消息队列message queue 先入先出原则;消息通信服务 //3.MQ的大三功能 流量消峰 应用解耦 消息中间件 //&#xff08;1&#xff09;人-订单系统(1万次/S)—> 人 - MQ(流量消峰,对访问人员进行排队) -…

Qt_介绍_环境安装_创建新项目_实现helloworld_坐标_1

文章目录 一、Qt是什么二、Qt的发展史三、Qt支持的平台四、Qt版本五、Qt的优点六、Qt的应用场景七、Qt开发环境&#xff0c;需要按照3个部分1.C编译器&#xff08;gcc,cl.exe....不是Visual Studio&#xff09;2.Qt SDK3.需要有一个Qt的集成开发环境&#xff08;IDE&#xff09…

云服务器+ASF实现全天挂卡挂时长

目录 前言正文1.安装下载2.编辑配置文件3.设置Steam社区证书4.启动ASF5.给游戏挂时长6.进阶-ASF自动启动且后台保活 前言 我遇到的最大的问题是&#xff0c;网络问题 其实不然&#xff0c;各大厂商的云服务器后台都有流量监控&#xff0c;意味着依靠一般方法是不能正常访问St…

最新可商用级chatgpt4.0系统源码+Midjourney-AI绘画系统 集成国内外数十个AI大模型和绘画接口

随着科技的飞速发展&#xff0c;人工智能正在逐步改变我们的生活&#xff0c;特别是在艺术创作领域。分享一款最新可商用级ChatGPT 4.0系统源码与Midjourney AI绘画系统的完美结合&#xff0c;集成国内外数十个AI大模型与绘画接口&#xff0c;为创作者们带来了前所未有的智能创…

DS:链表的分类

欢迎来到Harper.Lee的学习世界&#xff01; 博主主页传送门&#xff1a;Harper.Lee的博客主页 想要一起进步的uu欢迎来后台找我哦&#xff01; 链表的结构⾮常多样&#xff0c;以下情况组合起来就有8种&#xff08;2 * 2 * 2&#xff09;链表结构。下面我们依次来认识它们吧&am…

centos7安装真的Redmine-5.1.2+ruby-3.0.0

下载redmine-5.1.2.tar.gz&#xff0c;上传到/usr/local/目录下 cd /usr/local/ tar -zxf redmine-5.1.2.tar.gz cd redmine-5.1.2 cp config/database.yml.example config/database.yml 配置数据连接 #编辑配置文件 vi config/database.yml #修改后的内容如下 product…

如何基于nginx组建多个子目录网站

华子目录 实验要求实验步骤 实验要求 组建多个子目录网站www.openlab.com&#xff0c;该网站有2个子目录www.openlab.com/sxhkt和www.openlab.com/zywww.openlab.com/sxhkt使用http读取www.openlab.com/zy使用https读取 实验步骤 准备工作 [rootserver ~]# setenforce 0[ro…

深度学习之基于YOLOv5的山羊行为识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 深度学习之基于YOLOv5的山羊行为识别系统是一个创新的项目&#xff0c;旨在通过深度学习和目标检测技术&#xff0c…

Nginx三大功能详解

文章目录 Nginx&#xff08;动静分离&#xff09;1.基本介绍2.需求分析3.思路分析4.先使用传统的方式1.配置win的tomcat1.webapps\search\cal.jsp2.webapps\search\image\cal.jpg3.启动tomcat&#xff0c;访问 http://192.168.200.1:8080/search/cal.jsp 2.配置linux的tomcat1.…

计算机毕业设计PHP+vue体检预约管理系统d1yu38

防止在使用不同数据库时&#xff0c;由于底层数据库技术不同造成接口程序紊乱的问题。通过本次系统设计可以提高自己的编程能力&#xff0c;强化对所学知识的理解和运用 本系统是一个服务于医院先关内容的网站&#xff0c;在用户打开网站的第一眼就要明白网站开发的目的&#x…

通义灵码:智能编码的革命性助手

通义灵码是由阿里云推出的一款基于通义大模型的智能编码辅助工具&#xff0c;它通过先进的人工智能技术&#xff0c;为开发者提供了一系列的智能编码功能&#xff0c;极大地提升了编码效率和质量。以下是通义灵码的一些核心功能和应用案例。 核心功能 代码智能生成 通义灵码…