每日一题---环形链表的约瑟夫问题

文章目录

  • 前言
  • 1.题目
  • 2.解题思路
    • 2.1创建节点
  • 2.2.创建环形链表
    • 2.3.进行遍历
  • 4参考代码


前言

前段时间我们学习到了单链表和双向链表的相关知识,下面我们解决一道具有代表性的一个编程题。
牛客网—环形链表的约瑟夫问题


1.题目

在这里插入图片描述

2.解题思路

2.1创建节点

//创建节点
ListNode *LTByBode(int n)
{ListNode *newnode= (ListNode*)malloc(sizeof (ListNode));newnode->val=n;newnode->next=NULL;return newnode;
}

2.2.创建环形链表

//创建环形链表
ListNode *circleList(int x)
{ListNode *phead= LTByBode(1);ListNode *ptail=phead;for(int i=2;i<=x;i++){ptail->next= LTByBode(i);ptail=ptail->next;}//现在到了最后一个节点,然后首尾相连ptail->next=phead;return ptail;
}

2.3.进行遍历

在这里插入图片描述

1.首先要使用cnt进行计数,每走一步记录一次,开始的时候cnt=1。
还要创建两个指针,分别指向环形链表的第一个最小值(prev)和第二个最小值(pcur=prev->next)
2.如果cnt!=m,那么两个指针都往后走,cnt+1.
3.如果cnt==m,那么,先将prev的下一个指针,指向pcur的下一个指针(prev->next=pcur->next)。然后释放掉pcur,其次pcur也要往后移动(pcur=pcur->next),cnt恢复到默认值(cnt=1)。
4.循环的停止条件是pcur的下一个指针指向了自己(pcur->next=pcur)。


int ysm(int n,int m)
{ListNode *prev= circleList(n);ListNode *pcur=prev->next;int cnt=1;while (pcur->next!=pcur){if(cnt==m){prev->next=pcur->next;free(pcur);pcur=prev->next;cnt=1;}else {prev=pcur;pcur=pcur->next;cnt++;}}return pcur->val;
}

4参考代码

/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param n int整型 * @param m int整型 * @return int整型*/#include <stdlib.h>
typedef struct ListNode Listnode ;//创建节点Listnode* SLTByNode(int x){Listnode* tmp=(Listnode*)malloc(sizeof(Listnode));tmp->next=NULL;tmp->val=x;return tmp;}//创建循环链表Listnode* CreateCircle(int x){//先创建第一个字节Listnode*phead=SLTByNode(1);Listnode*ptail=phead;for(int i=2;i<=x;i++){ptail->next=SLTByNode(i);ptail=ptail->next;}//首尾相连,形成循环ptail->next=phead;return ptail;}
int ysf(int n, int m ) {// write code hereListnode* prev=CreateCircle(n);Listnode*pcur=prev->next;int cnt=1;while(pcur->next!=pcur){if(cnt==m){//销毁pcurprev->next=pcur->next;free(pcur);pcur=prev->next;cnt=1;}else {//不需要销毁prev=pcur;pcur=pcur->next;cnt++;}}return pcur->val;
}

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

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

相关文章

scratch选择火车下铺 2024年3月中国电子学会图形化编程 少儿编程 scratch编程等级考试四级真题和答案解析

目录 scratch根据身份证号码识别是否优先选择火车下铺 一、题目要求 1、准备工作 2、功能实现 二、案例分析

25计算机考研院校数据分析 | 复旦大学

复旦大学(fudan University)&#xff0c;简称"复旦”&#xff0c;位于中国上海&#xff0c;由中华人民共和国教育部直属&#xff0c;中央直管副部级建制&#xff0c;位列985工程、211工程、双一流A类&#xff0c;入选“珠峰计划"、"111计划""2011计划…

【学习】软件测试自动化,是未来的趋势还是当前的必需

在当今快速迭代的软件开发周期中&#xff0c;速度和质量成为了企业生存的关键。随着DevOps实践的普及和持续集成/持续部署&#xff08;CI/CD&#xff09;流程的标准化&#xff0c;软件测试自动化已经从未来的趋势转变为当前的必要性。本文将探讨自动化测试的现状、必要性以及其…

uniapp 引用组件后 不起作用 无效果 不显示

根据uniapp官方文档easycom组件规范 只要组件安装在项目的components目录下或uni_modules目录下&#xff0c;并符合components/组件名称/组件名称.(vue|uvue)目录结构&#xff08;注意&#xff1a;当同时存在vue和uvue时&#xff0c;uni-app 项目优先使用 vue 文件&#xff0c;…

【C语言__指针02__复习篇12】

目录 前言 一、数组名的理解 二、使用指针访问数组 三、一维数组传参的本质 四、冒泡排序 五、二级指针 六、指针数组 七、指针数组模拟二维数组 前言 本篇主要讨论以下问题&#xff1a; 1. 数组名通常表示什么&#xff0c;有哪两种例外情况&#xff0c;在例外情况中…

我用ADAU1467加5个ADAU1772,做20进10出的音频处理板(七):音量调节的更多例程

作者的话 ADAU1467是现阶段ADI支持最多通道的ADAU音频DSP&#xff0c;他配合外部的AD/DA&#xff0c;可以实现最多32路音频通道&#xff0c;接了一个小项目&#xff0c;我拿它做了一块20进10出的板&#xff0c;10个MIC/LINE输入,10个LINE IN输入&#xff0c;10个HPOUT&#xf…

贪心算法在单位时间任务调度问题中的应用

贪心算法在单位时间任务调度问题中的应用 一、引言二、问题描述与算法设计三、算法证明四、算法实现与效率分析五、C语言实现示例六、结论 一、引言 单位时间任务调度问题是一类经典的优化问题&#xff0c;旨在分配任务到不同的时间槽中&#xff0c;使得某种性能指标达到最优。…

Git和Github绑定

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Qt 菜单栏上手教程:QMenuBar QMenu QToolbar

引言 在Qt框架中&#xff0c;QMenuBar、QMenu、QToolbar和QAction都是用于构建应用程序界面中的用户交互元素。 QMenuBar 是什么&#xff1a;QMenuBar是一个用于创建横向菜单栏的类。在桌面应用程序中&#xff0c;它通常位于窗口的顶部。应用场景&#xff1a;当您需要一个包含…

关于Spring事务管理之默认事务间调用问题

由事务的传播行为我们知道, 如果将方法配置为默认事务REQUIRED在执行过程中Spring会为其新启事务REQUIRES_NEW, 作为一个独立事务来执行. 由此存在一个问题。 如果使用不慎, 会引发org.springframework.transaction.UnexpectedRollbackException: Transaction rolled back bec…

新技术前沿-2024-大型语言模型LLM的本地化部署

参考快速入门LLM 参考究竟什么是神经网络 1 深度学习 1.1 神经网络和深度学习 神经网络是一种模拟人脑神经元工作方式的机器学习算法,也是深度学习算法的基本构成块。神经网络由多个相互连接的节点(也称为神经元或人工神经元)组成,这些节点被组织成层次结构。通过训练,…

系统思考—啤酒游戏

最近有不少的合作伙伴来询问我啤酒游戏这个来自于MIT&#xff08;麻省理工学院&#xff09;经典的沙盘&#xff0c;上周刚刚结束Midea旗下的一家公司市场运营部《啤酒游戏沙盘-应对动态性复杂的系统思考智慧》的课程。 参与这次沙盘体验的团队成员深刻体会到了全局思考的重要性…

javascript(第三篇)原型、原型链、继承问题,使用 es5、es6实现继承,一网打尽所有面试题

没错这是一道【去哪儿】的面试题目&#xff0c;手写一个 es5 的继承&#xff0c;我又没有回答上来&#xff0c;很惭愧&#xff0c;我就只知道 es5 中可以使用原型链实现继承&#xff0c;但是代码一行也写不出来。 关于 js 的继承&#xff0c;是在面试中除了【 this 指针、命名提…

如何配置googleplay谷歌后台的Auth登陆和支付权限

相信很多谷歌开发者在谷歌平台发布过app产品,如果你接入过登陆和支付,那么你对下面的后台配置步骤以及服务器如何使用这些参数来进行校验并不陌生,这篇文章我将分享给大家关于如何在后台配置你上架应用的登陆权限和支付权限,服务器端如何使用相应的参数来做验证。 配置谷歌…

动态创建运行时Java Bean

基于Java字节码技术&#xff0c;如ASM、Javassist&#xff0c;前者偏底层、构建复杂&#xff0c;但性能相对较高&#xff1b;后者提供了友好的API接口方法&#xff0c;优雅简单&#xff0c;但性能稍弱。 本文基于Javassist&#xff0c;初探性以创建一个简单的类、里面创建一个…

利用Spring中的SchedulingConfigurer实现数据库配置化定时任务

目录 1.利用Scheduled来实现传统的定时任务 2.两者的区别 3.Spring中的SchedulingConfigurer来拓展定时任务的灵活性 1&#xff09;UrTaskConfig 2&#xff09;TaskMain 3&#xff09;BaseTask 4&#xff09;效果 &#xff08;1&#xff09;插入配置定时任务的sql语句 …

【webrtc】Chrome和Firefox在SDP协商过程中,针对localhost的不同处理

内网下chrome端webrtc协商失败 现象 我有一个webrtc服务器在局域网内&#xff0c;使用chrome浏览器访问时&#xff0c;发现webrtc在做媒体协商时失败。 具体表现是&#xff0c;在交换sdp后&#xff0c;ice的状态是oniceconnectionstatechange: failed 但是换成Firefox浏览器…

广东理工学院携手泰迪智能科技成功部署人工智能实验室

广东理工学院是经国家教育部批准设立的全日制普通本科院校&#xff0c;入选全国应用型人才培养工程培养基地、国家级众创空间试点单位、广东省高校电子商务人才孵化基地。开设34个本科专业&#xff0c;涵盖工学、经济学、管理学、文学、艺术学、教育学等6大学科门类&#xff0c…

docker容器技术篇:容器集群管理实战mesos+zookeeper+marathon(一)

容器集群管理实战mesoszookeepermarathon&#xff08;一&#xff09; mesos概述 1.1 Mesos是什么 Apache Mesos 是一个基于多资源调度的集群管理软件&#xff0c;提供了有效的、跨分布式应用或框架的资源隔离和共享&#xff0c;可以运行 Hadoop、Spark以及docker等。 1.2 为…

自然语言处理: 第二十八章大模型基底之llama3

项目地址: meta-llama/llama3: The official Meta Llama 3 GitHub site 前言 LLaMa系列一直是人们关注的焦点&#xff0c;Meta在4月18日发布了其最新大型语言模型 LLaMA 3。该模型将被集成到其虚拟助手Meta AI中。Meta自称8B和70B的LLaMA 3是当今 8B 和 70B 参数规模的最佳模…