python 单向循环(环形)链表

news2024/11/26 12:34:53

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

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

 现假设 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 = node
            node.next = self.first
        else:
            temp = self.first
            while temp.next != self.first:
                temp = temp.next

            # 找到了循环链表的最后一个节点
            temp.next = node
            node.next = self.first

    # 遍历循环链表
    def for_single_circle_linked_list(self):
        # 判断链表是否为空
        if not self.first:
            print("链表为空...")
            return

        temp = self.first
        while True:
            end = " -> " if temp.next != self.first else ""
            print(temp.no, end=end)
            temp = temp.next
            if temp == self.first:
                break
        print()


# 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 = None
    temp = s.first
    while True:
        if temp.next.no == k:
            # nonlocal pre
            pre = temp
            break
        temp = temp.next

    # 4、first 指向要报数的节点, pre 指向要报数的前一个节点
    first = pre.next

    print("出圈顺序为:")
    while first != pre:
        # 5、让 first 报数 m 次,即让 first 和 pre 移动 m - 1 次
        for i in range(m - 1):
            pre = pre.next
            first = first.next

        # 6、当 first 指向的节点出圈
        print(first, end=" -> ")
        first = first.next
        pre.next = first
    print(first)


josepfu(5, 2, 1)
josepfu(125, 20, 10)

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

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

相关文章

文件上传漏洞之条件竞争

这里拿upload-labs的第18关做演示 首先先看代码 $is_upload false; $msg null;if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_name $_FILES[upload_file][name];$temp_file $_FILES[upload_file][tmp_name];$file_ext substr($file_name,strrpos($file_…

如何编译打包OpenSSH 9.4并实现批量升级

1 介绍 openssh 9.4版本已于8月10号发布&#xff0c;安全团队又催着要赶紧升级环境里的ssh版本&#xff0c;本文主要介绍Centos5、Centos6、Centos7下openssh 9.4源码编译rpm包以及批量升级服务器openssh版本的方法。关注公众号后台回复ssh可获取本文相关源码文件。 https://w…

正则的匹配原理以及优化原则

正则之所以能够处理复杂文本&#xff0c;就是因为采用了有穷状态自动机&#xff08;finite automaton&#xff09;。那什么是有穷自动机呢&#xff1f;有穷状态是指一个系统具有有穷个状态&#xff0c;不同的状态代表不同的意义。自动机是指系统可以根据相应的条件&#xff0c;…

朋友圈也可以定时定量发送?

场景1&#xff1a;明天要搞活动&#xff0c;早中晚都得发朋友圈&#xff0c;一天要发3次朋友圈&#xff0c;要在手机上定好3个闹钟&#xff0c;这是一件非常麻烦的事。 场景2&#xff1a;有朋友是房产信息的&#xff0c;每天要发布很多二手房源&#xff0c;手动发圈太耗时间&a…

Eziriz .NET Reactor crack,代码中调用许可系统

Eziriz .NET Reactor crack,代码中调用许可系统 .NET reactor被描述为软件许可程序以及在.NET和程序集框架中编写的应用程序的安全代码。它是非常强大的代码保护以及软件系统的许可。无论用户在为.NET的Microsoft框架编译程序的过程中执行什么&#xff0c;该程序都可以向用户提…

[MyBatis系列⑥]注解开发

&#x1f343;作者简介&#xff1a;准大三本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐MyBatis系列①&#xff1a;增删改查 ⭐MyBatis系列②&#xff1a;两种Dao开发方式 ⭐MyBatis系列③&#xff1a;动态SQL ⭐MyBatis系列④&#xff1a;核心…

全新版本QStack云管系统3.5.3 附详细安装教程

源码介绍&#xff1a; QStack云管系统3.5.3&#xff0c;全新版本下载安装包详细搭建教程。 涵盖了服务器、云主机、代理IP等多种云产品管理运维和安全存储。 同时&#xff0c;QStack还支持对接运营众多公有云厂商产品资源&#xff0c;满足不同用户的需求。 通过开放API和插…

(java)进程和线程的联系和区别

目录 进程 1.进程具有独立性 ———— 虚拟地址空间 线程 为什么要引入多个线程&#xff1f; 多线程注意点 ⁜⁜总结&#xff1a;线程和进程的区别和联系⁜⁜ 进程 1.进程具有独立性 首先介绍一下 ———— 虚拟地址空间 在这之前还要了解一下 —— “物理内存”…

接口自动化测试攻略,必看!

为什么要做接口自动化 相对于UI自动化而言&#xff0c;接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验&#xff0c;APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化&#xff0c;导致自动化的代码频繁变更&#xff0c;没有起到减少工作量的效果。 而…

VS Code内存占用过高 - 解决方案

前言 使用VS Code时&#xff0c;其占用的内存可能会急剧增加&#xff0c;从而增加计算机内存的压力&#xff0c;下文介绍如何减少VS Code的内存占用。 通过此方案&#xff0c;本人从3G的内存占用降到了700M的内存占用。 解决方案 打开VS Code的设置&#xff0c;如下图&…

Keepalived(二)

实验一 KeepalivedLvsNginx 实现高可用集群&#xff0c;保证nginx服务正常运行 系统centos7 IP主机名作用192.168.28.141/24klmaster配置Keepalived&#xff08;Master&#xff09;、配置LVS&#xff0c;作为负载均衡器192.168.28.143/24klbackup配置Keepalived&#xff08;…

数据分析 | 特征重要性分析 | 树模型、SHAP值法

前言 在分析特征重要性的时候&#xff0c;相关性分析和主成分分析往往是比较简单的方法&#xff0c;相关性分析是通过计算特征与目标变量之间的相关系数来评估特征的重要性。它可以告诉我们特征和目标变量之间的线性关系程度&#xff0c;但对于非线性关系就无能为力了&#xff…

微前端:重塑大型项目的前沿技术

引言 随着互联网技术的飞速发展&#xff0c;前端开发已经从简单的页面制作逐渐转变为复杂的应用开发。在这个过程中&#xff0c;传统的前端开发模式已经难以满足大型项目的需求。微前端作为一种新的前端架构模式&#xff0c;应运而生&#xff0c;它旨在解决大型项目中的前端开…

C语言基础语法——数据类型

数据类型介绍 数据类型&#xff1a;数据所属的类型 数据类型的作用&#xff1a;编译器预算数据分配的内存空间大小 变量 变量的语法 在计算机程序中&#xff0c;变量是用来存储数据的一个内存区域&#xff0c;并用一个名字来表示这个区域。 在程序运行过程中&#xff0…

Android事件分发

Android事件分发是指触摸屏幕的事件分发&#xff0c;在手指触摸屏幕后所产生的一系列事件中&#xff0c;典型的事件类型有如下几种: MotionEvent.ACTION_DOWN ——手指刚接触屏幕MotionEvent.ACTION_MOVE——手指在屏幕上面滑动MotionEvent.ACTION_UP——手指从屏幕上松开的一…

C语言每日一题 ----计算日期到天数转换(Day 2)

本专栏为c语言练习专栏&#xff0c;适合刚刚学完c语言的初学者。本专栏每天会不定时更新&#xff0c;通过每天练习&#xff0c;进一步对c语言的重难点知识进行更深入的学习。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;C语言天天练 &#x…

m3u8 blob视频免费下载

F12点开找到这个视频url最后是.m3u8结尾 http://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html 在上边的网址转Mp4下载即可

HBase集群环境搭建与测试

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

【第四阶段】kotlin语言的List创建与元素获取

1.list创建 val list listOf("jave","kotlin","c","c")2.list集合获取的三种方式 开发过程中尽量使用getOrElse()或者getOrNull&#xff0c;因为他可以防止崩溃取值 package Stage4fun main() {//list 创建val list listOf("jav…

m4s格式转换mp4

先安装 ffmpeg&#xff0c;具体从官网可以查到&#xff0c;https://ffmpeg.org&#xff0c;按流程走。 转换代码如下&#xff0c;可以任意选择格式导出 import subprocess import osdef merge_audio_video(input_audio_path, input_video_path, output_mp4_path):# 构建 FFmpe…