当前位置: 首页 > news >正文

C++ 环形链表(解决约瑟夫问题)

约瑟夫问题描述:

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

约瑟夫问题例子:

       开始5个人 1,2,3,4,5 ,从1开始报数,1->1,2->2编号为2的人离开 1,3,4,5,从3开始报数,3->1,4->2编号为4的人离开 1,3,5,从5开始报数,5->1,1->2编号为1的人离开 3,5,从3开始报数,3->1,5->2编号为5的人离开 最后留下人的编号是3。

#include <iostream>using namespace std; typedef struct ListNode
{int value;ListNode* next;ListNode(int val, ListNode* node) : value(val), next(node) {}
}ListNode;ListNode* createList(int nodeNum)
{ListNode* pHead = nullptr;ListNode* pNew = nullptr;for (int i = nodeNum; i > 0; i--){pNew = new ListNode(i, pHead);pHead = pNew;}return pHead;
}ListNode* createCycleList(int nodeNum)
{ListNode* pHead = nullptr;ListNode* pNew = nullptr;ListNode* pTail = nullptr; for (int i = nodeNum; i > 0; i--){	pNew = new ListNode(i, pHead);pHead = pNew;if (i == nodeNum){pTail = pNew;}}pTail->next = pHead;return pHead;
}ListNode* createList(int arr[], int arrLen)
{ListNode* pHead = nullptr;ListNode* pNew = nullptr;for (int i = arrLen - 1; i >= 0; i--){pNew = new ListNode(arr[i], pHead);pHead = pNew;}return pHead;
}void printList(ListNode* pNode)
{while (pNode){std::cout << pNode->value << " ";pNode = pNode->next;}std::cout << std::endl;}ListNode* SloveJosephProblem(ListNode* pHead, int m)
{if (m < 0){return nullptr;}if (!pHead || !pHead->next)return pHead;int inc = 1;//环形链表的判断while (pHead != pHead->next){if (inc == m - 1 ){std::cout << "leaver: " << pHead->next->value << std::endl;pHead->next = pHead->next->next;inc = 1;}else{inc++;}pHead = pHead->next;}pHead->next = nullptr;return pHead;
}int main()
{ListNode* pHead = createCycleList(5);//printList(pHead);ListNode* pLast = SloveJosephProblem(pHead, 2);printList(pLast);return 0;
}

http://www.lryc.cn/news/367100.html

相关文章:

  • 【微信小程序】模板语法
  • 深入了解 C 语言 Bug
  • Redis 内存回收
  • 【讲解下ECMAScript和JavaScript之间有何区别?】
  • Linux基本指令查询硬件信息001
  • Spring Boot(七十四):集成Guava 库实现布隆过滤器(Bloom Filter)
  • 二叉查找树详解
  • 3072. 将元素分配到两个数组中 II
  • 城市之旅:使用 LLM 和 Elasticsearch 简化地理空间搜索(二)
  • 【知识点】 C++ 构造函数 参数类型为右值引用的模板函数
  • 华为云服务器-云容器引擎 CCE环境构建及项目部署
  • Linux shell编程学习笔记57:lshw命令 获取cpu设备信息
  • 连山露【诗词】
  • 【Qt】Frame和Widget的区别
  • Python爬虫实战:从入门到精通
  • 堆算法详解
  • 6.6SSH的运用
  • MySQL-备份(三)
  • 结构体(1)<C语言>
  • HW面试应急响应之场景题
  • 30-unittest生成测试报告(HTMLTestRunner插件)
  • 鸿蒙北向开发 IDE DevEco Studio 3.1 傻瓜式安装闭坑指南
  • Oracle数据库面试题-9
  • 跟着小白学linux的基础命令
  • 2024-06-08 Unity 编辑器开发之编辑器拓展9 —— EditorUtility
  • Mac下删除系统自带输入法ABC,正解!
  • redis学习路线
  • 数据库练习题
  • 【每日一函数】uname 函数介绍及代码演示
  • linux:命令别名,文件描述符及重定向