单向循环链表的约瑟夫环问题

ops/2025/1/12 4:14:25/

编号为1nn个人围成一圈。从编号为1的人开始报数,报到m的人离开。下一个人继续从1开始报数。n-1轮结束以后,只剩下一个人,问最后留下的这个人编号是多少?

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

 

1、创建结点

链表的创建节点相同。

//创建节点
ListNode* CreateNode(int x)
{ListNode* newnode = (ListNode*)malloc(sizeof(ListNode));if (newnode == NULL){perror("malloc fail");exit(-1);}newnode->val = x;newnode->next = NULL;return newnode;
}

2、创建链表

将节点之间链接成链表,需要注意的是,n个人,其实就化作n个节点,将其连接成一个环形链表

//连接节点创建链表
ListNode* CreateList(int n)
{ListNode* phead, * ptail;int i = 1;ptail = phead = CreateNode(i++);while (i <= n){ptail->next = CreateNode(i++);ptail = ptail->next;}//成环ptail->next = phead;return phead;
}

注意链接到最后,成环需要将尾节点的next指针指向头结点。 

3、处理约瑟夫环问题

创建一个变量i用于记录节点的位置,创建cur指针遍历这个环形链表,当 i != m 时,继续遍历环形链表;当 i == m 时,我们需要将此时cur指向的节点删除,并链接cur指向节点的前一个节点和后一个节点,进行前述操作需要额外创建一个指针prev指向cur上一个节点进行操作。然后继续处理,直到该环形链表最后只剩下一个节点停止并返回该节点的值。

int JosephRing(int n, int m) {ListNode* head = CreateList(n);ListNode* cur = head;ListNode* prev = NULL;int i = 1;while (cur->next != cur){if (i == m){prev->next = cur->next;free(cur);cur = prev->next;i = 1;}else{prev = cur;cur = cur->next;i++;}}return cur->val;
}


http://www.ppmy.cn/ops/149347.html

相关文章

AI绘图咒语分享丨蛇年IP形象如何一键制作

咒语&#xff1a;IP形象&#xff0c;皮克斯风格&#xff0c;C4D&#xff0c;3D&#xff0c;一个可爱的赤壁蛇状生物&#xff0c;毛毡制成&#xff0c;鳞片上有花卉刺绣&#xff0c;呈淡绿色和粉红色。一个可爱的赤壁蛇状生物&#xff0c;由立体建模制成&#xff0c;鳞片上有花卉…

QT转到槽报错The class containing “Ui::MainWindow“ could not be found in...

问题&#xff1a;使用QT时&#xff0c;由于在其他文件当中也有操作UI的情况&#xff0c;所以不得已在其他文件当中包含#include "ui_mainwindow.h"这个UI的头文件&#xff0c;当在UI当中的控件点击转到槽时就会报错 原因是我在qt当中使用了线程&#xff0c;在使用线…

第37周:咖啡豆识别 (Tensorflow实战第七周)

目录 前言 一、前期工作 1.1 设置GPU 1.2 导入数据 输出 二、数据预处理 2.1 加载数据 2.2 可视化数据 2.3 配置数据集 三、构建VGG-16网络 3.1 VGG-16网络介绍 3.2 搭建VGG-16模型 3.2.1 直接调用官方 3.2.2 自建模型 四、编译 4.1 设置动态学习率 五、模型训…

在 Ubuntu 上对 Nginx 进行源码编译的详细指南

要在 Ubuntu 上对 Nginx 进行源码编译并包含 TCP 负载均衡模块&#xff08;即 Stream 模块&#xff09;&#xff0c;请按照以下步骤操作&#xff1a; 1. 安装编译所需的依赖 首先&#xff0c;确保系统的软件包列表是最新的&#xff0c;并安装编译 Nginx 所需的基本工具和库&a…

怎么对PDF插入图片并设置可见程度-免费PDF编辑工具分享

一、PDF文件插入图片操作的需求背景 在我们日常对PDF文件的各种处理中&#xff0c;我们有时需要对手中的PDF插入一些图片&#xff0c;以期达到更好的页面视觉效果&#xff0c;包括增强视觉效果、丰富信息呈现、个性化定制、提高专业度、简化阅读流程、符合法规要求以及适应不同…

朝天椒USB服务器在三枪集团财务中心的应用

三枪集团作为一家大型企业集团&#xff0c;其财务中心日常需处理大量的网银操作和资金流转&#xff0c;网银U盾的管理成为一项重要而复杂的任务。传统U盾管理方式存在诸多不便&#xff0c;如U盾分散、管理混乱、使用效率低下以及安全隐患等。为了解决这些问题&#xff0c;三枪集…

大疆上云API连接遥控器和无人机

文章目录 1、部署大疆上云API关于如何连接我们自己部署的上云API2、开启无人机和遥控器并连接自己部署的上云API如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下如果遥控器和无人机已经对频好了的情况下 4、订阅无人机或遥控器的主题信息4.1、订阅无人机实时…

Kali系统(Debian 10.3) 遇到的问题

目录 问题一&#xff1a;非问题 kali 基础官网与安装 问题二&#xff1a; 问题三&#xff1a; Kali系统 MySQL问题Cant connect to local MySQL server through socket /run/mysqld/mysqld.sock (2) 问题四&#xff1a;重新安装MySQL 也就是MariaDB(MariaDB 含 MySQL相关…