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

文章目录

  • 前言
  • 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.hqwc.cn/news/644307.html

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

相关文章

CentOS 7.9.2007 中Docker使用GPU

一、安装nvidia驱动 1.1&#xff0c;查看显卡驱动 # 查看显卡型号 lspci | grep -i nvidia 1.2&#xff0c;进入 PCI devices &#xff0c;输入上一步查询到的 2204 1.3&#xff0c;进入 官方驱动 | NVIDIA&#xff0c;查询 Geforce RTX 3090 驱动并下载 1.4&#xff0c;禁用…

【SpringBoot整合系列】SpringBoot配置多数据源

目录 背景技术选型配置多数据源思路(以两个为例)代码实现1.导入依赖2.各自的配置 3.各自的dataSourcenews数据库的smbms数据库的注意&#xff1a;Primary注解 4.各自的SqlSessionFactory等news数据库的smbms数据库的 5.去掉启动类头上的MapperScan6.各自的mapper接口7.各自的ma…

齐护K210系列教程(八)_LCD显示图片

LCD显示图片 文章目录 LCD显示图片1&#xff0c;显示单张图片2&#xff0c;通过按键切换显示SD卡内的图片3&#xff0c;通过传感器切换图片4&#xff0c;画中画显示&#xff0c;并缩放5&#xff0c;课程资源 联系我们 AIstart 显示的图片的默认分辨率为&#xff1a;320*240 &am…

「ChatGPT」掀起新一轮AI热潮!超越GPT-4 Turbo,商汤日日新大升级!

目录 拳打 GPT-4 Turbo &#xff0c;脚踢 DALLE 3 端侧大模型&#xff0c;唯快不破 AI 应用落地需要一个即插即用的大模型超市 并不存在 AI 这个行业&#xff0c;只有 AI行业&#xff0c;强调 AI 需要与传统产业合作&#xff0c;这种关系是结合与赋能&#xff0c;而不是颠覆…

VS窗口固定尺寸的方法

Dialog每次都要找窗口尺寸固定的设置&#xff0c;因此在这个地方做个笔记 下次就好检索了。年级大了 脑子不够用了。

Qt : Windows剪切板监控

简介 偶然需要记录一下我的剪切内容&#xff0c; 在我完成所有剪切之后将内容存储到文件&#xff0c;这里使用到Qt5.15.2&#xff0c; 下面我们就来看看是怎么做的吧。 实现 代码 // 获取剪切板对象 clipboard QApplication::clipboard();// 连接剪切板内容变化信号到槽函数…

flutter笔记-万物皆是widget

文章目录 helloFlluter自定义Widget优化 这篇文章后就不见写了&#xff0c;学flutter主要是为了更好的使用 flutter-webrtc&#xff0c;所以到这里基本就了解了大部分的知识&#xff0c;后续边用边查&#xff1b; 在flutter中所有的view都叫widget&#xff0c;类似文本组件Tex…

蓝桥杯-网络安全-练习题-crypto-rsa

共模攻击 直接脚本即可 import libnum import gmpy2import random random.seed(123456)e1 random.randint(100000000, 999999999) print(e1) e2 65537 n 7265521127830448713067411832186939510560957540642195787738901620268897564963900603849624938868472135068795683…

618买什么最划算?618买什么东西便宜?必备数码好物清单分享

​只不&#xff0c;马上又到了618购物节咯&#xff0c;数码产品的优惠力度尤为显著&#xff0c;是购买数码产品的绝佳时机。接下来&#xff0c;我将为大家分享几款性价比超高的数码产品&#xff0c;相信总有一款能吸引你的目光。 一、南卡OE MIX开放式蓝牙耳机 在618购物狂欢节…

【vue2】实现微信截图(复制图片)在项目内可粘贴

需求 后台管理在上传图片地方需要将复制的图片粘贴上传 一、添加事件 在原有上传组件的基础上添加 paste事件 二、方法 onPaste(e) {const items (e.clipboardData || window.clipboardData).items;let blob null;for (let i 0; i < items.length; i) {if (items[i].ty…

【氧化镓】影响Ga2O3器件沟道载流子迁移率的关键因素

总结 这篇文章对β-Ga2O3 MOSFETs中的通道载流子迁移率进行了深入研究&#xff0c;通过实验测量和理论分析&#xff0c;揭示了影响迁移率的关键因素&#xff0c;特别是库仑散射的影响。研究结果对于理解和改进β-Ga2O3 MOSFETs的性能具有重要意义&#xff0c;为未来的研究和器…

混沌工程理论建设和项目实践

混沌工程理论建设和项目实践 1. 背景说明2. 为什么要做混沌工程2.1 混沌目标2.2 演习对象2.3 影响可用性的主要因素及应对2.4 可行性论证和控制爆炸半径 3. 如何落地3.1 安全、有效的实验3.2 安全&#xff1a;不影响线上业务3.2.1 爆炸半径3.2.2 特殊限制与审批 3.3 有效&#…