python 单向循环(环形)链表

不带头结点的单向循环链表的示意图

循环链表的应用场景【约瑟夫问题】

 现假设 n = 5(一共有 5 个人),k = 1(从第 1 个人开始报数), m = 2(数 2 下),则出队编号的序列为:2 -> 4 -> 1 -> 5 -> 3

创建单向循环链表

 代码实现:

# 创建一个 Node 类,表示一个节点
class Node:next = None  # 指向下一个节点def __init__(self, no: int):self.no = no# 创建一个单向循环链表
class SingleCircleLinkedList:first = None  # 指向循环链表的第一个节点,初始为空def add(self, node: Node):if not self.first:# 如果添加的是第一个节点self.first = nodenode.next = self.firstelse:temp = self.firstwhile temp.next != self.first:temp = temp.next# 找到了循环链表的最后一个节点temp.next = nodenode.next = self.first# 遍历循环链表def for_single_circle_linked_list(self):# 判断链表是否为空if not self.first:print("链表为空...")returntemp = self.firstwhile True:end = " -> " if temp.next != self.first else ""print(temp.no, end=end)temp = temp.nextif temp == self.first:breakprint()# num 为环形链表的节点个数
def test_single_circle_linked_list(num):scll = SingleCircleLinkedList()for i in range(num):scll.add(Node(i + 1))scll.for_single_circle_linked_list()test_single_circle_linked_list(5)

 约瑟夫问题思路分析及代码实现

约瑟夫问题的代码实现

# 约瑟夫问题的代码实现
# 根据用户输入,计算节点出圈顺序
def josepfu(n: int, m: int, k: int):"""现假设 n = 5(一共有 5 个人)k = 1(从第 1 个人开始报数)m = 2(数 2 下)则出队编号的序列为:2 -> 4 -> 1 -> 5 -> 3"""# 校验数据if k < 1 or k > n:print("输入有误!")return# 1、创建循环链表s = SingleCircleLinkedList()# 2、向循环链表中添加 n 个节点for i in range(n):s.add(Node(i + 1))# 3、找到要开始报数的节点的前一个节点pre = Nonetemp = s.firstwhile True:if temp.next.no == k:# nonlocal prepre = tempbreaktemp = temp.next# 4、first 指向要报数的节点, pre 指向要报数的前一个节点first = pre.nextprint("出圈顺序为:")while first != pre:# 5、让 first 报数 m 次,即让 first 和 pre 移动 m - 1 次for i in range(m - 1):pre = pre.nextfirst = first.next# 6、当 first 指向的节点出圈print(first, end=" -> ")first = first.nextpre.next = firstprint(first)josepfu(5, 2, 1)
josepfu(125, 20, 10)

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

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

相关文章

《存储IO路径》专题:IO虚拟化初探

大家好&#xff0c;欢迎来到今天的科技小课堂。今天我们要聊聊的是一项非常有趣且实用的技术——I/O虚拟化&#xff08;Input/Output Virtualization&#xff0c;简称IOV&#xff09;。想象一下&#xff0c;如果把物理硬件资源比作一道丰盛的大餐&#xff0c;那么IOV就是那位神…

【C++初阶】stack的常见操作和模拟实现

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

服务器基础

0x01基础 介绍 可以理解为企业级的电脑&#xff0c;比个人使用的电脑具备更强的配置、性能、可靠性及稳定性。设计工艺和器件全部采用企业级设计&#xff0c;保障7*24小时稳定运行。 演进历史 处理性能 外观 发展方向 分类 按外形分类 按高度分类 按应用分类 按综合能力…

Particle Life粒子生命演化的MATLAB模拟

Particle Life粒子生命演化的MATLAB模拟 0 前言1 基本原理1.1 力影响-吸引排斥行为1.2 距离rmax影响 2 多种粒子相互作用2.1 双种粒子作用2.1 多种粒子作用 3 代码 惯例声明&#xff1a;本人没有相关的工程应用经验&#xff0c;只是纯粹对相关算法感兴趣才写此博客。所以如果有…

Qt 打开文件列表选择文件,实现拖拽方式打开文件

1. 实现打开文件列表选择文件 1.1. 创建 Qt 工程&#xff0c;并添加几个简单控件 这里笔者选用的是 QMainWindow&#xff0c;创建好工程后在 ui 界面设计中添加 QLineEdit、QPushBtton至少这两个控件&#xff0c;如下图摆放。 1.2. 头文件中添加相关操作 在 mainwindow.h 中…

行业追踪,2023-08-29

自动复盘 2023-08-29 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

各个微服务模块之间互相依赖调用的问题

首先是模块之间不能够循环引用&#xff0c;否则会报循环依赖引入的错误。 没有了模块之间的相互依赖&#xff0c;在项目中这两个模块是相互调用的&#xff0c;分别各自定义相应的Feign接口&#xff0c;如下&#xff1a; 最开始写的运行报错的代码如下&#xff1a; FeignCli…

使用ELK(ES+Logstash+Filebeat+Kibana)收集nginx的日志

文章目录 Nginx日志格式修改配置logstash收集nginx日志引入Redis收集日志写入redis从redis中读取日志 引入FilebeatFilebeat简介Filebeat安装和配置 配置nginx转发ES和kibanaELK设置账号和密码 书接上回&#xff1a;《ELK中Logstash的基本配置和用法》 Nginx日志格式修改 默认…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 7 Function callers标签页介绍

不知不觉这个code-mapping专题已经写了6篇文章了,今天是我们这个专题的最后一篇文章了介绍Function callers 这个其实很简单,以前的文章里也有提到CS接口实现两个SWC之间的CS调用,我们在从Code-mapping的角度在说下 首先还是看下模型 我们还记得在simulink里我们用function…

安装Ubuntu服务器、配置网络、并安装ssh进行连接

安装Ubuntu服务器、配置网络、并安装ssh进行连接 1、配置启动U盘2、配置网络3、安装ssh4、修改ssh配置文件5、重启电脑6、在远程使用ssh连接7、其他报错情况 1、配置启动U盘 详见: U盘安装Ubuntu系统详细教程 2、配置网络 详见&#xff1a;https://blog.csdn.net/davidhzq/a…

自动化测试(三):接口自动化pytest测试框架

文章目录 1. 接口自动化的实现2. 知识要点及实践2.1 requests.post传递的参数本质2.2 pytest单元测试框架2.2.1 pytest框架简介2.2.2 pytest装饰器2.2.3 断言、allure测试报告2.2.4 接口关联、封装改进YAML动态传参&#xff08;热加载&#xff09; 2.3 pytest接口封装&#xff…

论文阅读:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks

前言 要弄清MAML怎么做&#xff0c;为什么这么做&#xff0c;就要看懂这两张图。先说MAML**在做什么&#xff1f;**它是打着Mate-Learing的旗号干的是few-shot multi-task Learning的事情。具体而言就是想训练一个模型能够使用很少的新样本&#xff0c;快速适应新的任务。 定…