iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python如何实现环形链表
  • 910
分享到

Python如何实现环形链表

2023-06-30 16:06:17 910人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

这篇文章主要介绍“python如何实现环形链表”,在日常操作中,相信很多人在Python如何实现环形链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现环形链表”的疑惑有所帮助!接下来,请跟

这篇文章主要介绍“python如何实现环形链表”,在日常操作中,相信很多人在Python如何实现环形链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现环形链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

我们将单向链表的最后一个节点的指针指向链表的头部(第一个节点),那么就形成了一个环形链表。环形节点可以从任意节点开始遍历其他的节点。

这里主要实现了环形链表节点的遍历、添加、插入、删除,反转。

代码如下:

class Player:    """节点类"""    def __init__(self):        """初始化姓名,分数,指针"""        self.name = ''        self.score = 0        self.next = None  def erGodic(head, num=None, is_print=False):    """遍历函数,num是遍历到哪一个位置序号,is_print是否触发打印方法"""    if head.next is None:        return None    ptr = head    count = 0    while True:        count += 1        if is_print:            print('No.'+str(count), ptr.name, ptr.score, '--->', ptr.next.name)        if count == num:            break        if ptr.next == head:            break        ptr = ptr.next    return ptr  # 返回遍历完成后的最后一个节点  def invert(x):  # x是链表的第一个节点    """反转环形链表"""    y = x.next  # y是x原来的next    x.next = ergodic(x)  # 将第一个节点的next指向最后一个节点(因为反转了)    while True:  # 循环反转后面的所有节点        r = y.next        y.next = x        if r == head:  # r是head说明y已经是原本链表的最后一个节点了            return y  # 返回y,这个y是反转后的链表的第一个节点        x = y        y = r  head = Player()ptr = head  while True:    select = input("(1).新增   (2).查看   (3).插入   (4).删除   (5).反转   (6).离开\n输入:")    if select == "1":  # 新增节点        ptr = ergodic(head)  # 获取当前链表最后一个节点        if ptr is None:  # ptr为None说明当前在添加第一个节点head            head.name = input("姓名:")            head.score = input("分数:")            head.next = head        else:  # 添加第一个节点之后的节点            next_data = Player()            next_data.name = input("姓名:")            next_data.score = input("分数:")            next_data.next = head            ptr.next = next_data     elif select == "2":  # 遍历查看链表所有节点        ergodic(head, is_print=True)  # 遍历链表,将打印参数设为True     elif select == '3':  # 向链表中任意位置插入节点,位置以序号表示,即第一个节点序号为1,第二个节点序号为2,以此类推        try:            num = int(input("请输入需要插入的节点位置序号:"))  # 输入序号必须是大于0的正整数,如果输入大于最后一个节点的序号则插入到最后一个节点之后            if num < 1:                print("输入必须为大于0的正整数")                continue        except ValueError:            print("输入有误")            continue        ptr = ergodic(head, num-1)  # 获取需要插入位置的前一个节点        insert_data = Player()        insert_data.name = input("姓名:")        insert_data.score = input("分数:")        insert_data.next = ptr.next        ptr.next = insert_data        if num == 1:  # 如果插入位置是1的话,那么head将发生变化            head = insert_data     elif select == '4':  # 删除链表中任意位置的节点        try:            num = int(input("请输入需要删除的节点位置序号:"))  # 输入序号必须是大于0的正整数,如果输入大于最后一个节点的序号则删除最后一个节点            if num < 1:                print("输入必须为大于0的正整数")                continue        except ValueError:            print("输入有误")            continue        ptr = ergodic(head, num - 1)  # 获取需要删除位置的前一个节点        if ptr == ergodic(head, num):  # 输入序号过大时需要做特殊处理,因为输入序号过大也代表删除最后一个节点,那么这时我需要获取这最后一个节点的前一个节点            ptr = ergodic(ptr)        ptr.next = ptr.next.next        if num == 1:  # 如果删除位置是1的话,那么head将发生变化            head = ptr.next     elif select == '5':  # 反转链表        new_first = invert(head)  # 获取新的第一个节点        head = new_first  # head指向新的第一个节点        print('成功反转')     elif select == '6':        print("成功离开")        break    else:        print("输入错误,请重试")

部分运行结果如下:

Python如何实现环形链表

到此,关于“Python如何实现环形链表”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Python如何实现环形链表

本文链接: https://www.lsjlt.com/news/330080.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python如何实现环形链表
    这篇文章主要介绍“Python如何实现环形链表”,在日常操作中,相信很多人在Python如何实现环形链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现环形链表”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-30
  • Python实现环形链表
    本文实例为大家分享了Python实现环形链表的具体代码,供大家参考,具体内容如下 我们将单向链表的最后一个节点的指针指向链表的头部(第一个节点),那么就形成了一个环形链表。环形节点可...
    99+
    2024-04-02
  • python单向循环链表如何实现
    本篇内容主要讲解“python单向循环链表如何实现”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python单向循环链表如何实现”吧!单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链...
    99+
    2023-07-06
  • C语言实现带头双向环形链表
    双向循环链表 上一次我们讲了单向无头非循环链表的实现,单向无头非循环链表的特点是:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构。而带头双向循环链表则恰恰与无...
    99+
    2024-04-02
  • 算法141. 环形链表
    1. 题目描述给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。示例 1:输入:head = [3,2,0,-4...
    99+
    2023-06-03
  • python如何实现双链表
    本篇内容介绍了“python如何实现双链表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!实现双链表需要注意的地方如何插入元素,考虑特殊情况:...
    99+
    2023-06-30
  • javascript循环链表之如何实现约瑟夫环
    小编给大家分享一下javascript循环链表之如何实现约瑟夫环,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!代码如下:var node = this.hea...
    99+
    2024-04-02
  • C语言怎么实现带头双向环形链表
    本篇内容主要讲解“C语言怎么实现带头双向环形链表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言怎么实现带头双向环形链表”吧!双向循环链表上一次我们讲了单向无头非循环链表的实现,单向无头非循...
    99+
    2023-06-21
  • python单向循环链表怎么实现
    单向循环链表将所有的链接在一起,每一个节点分为数据存储区和链接区,数据区存储数据,链接区链接下一个节点item: 存储数据的地方next: 链接下一个节点注意: 单向循环链表是首位链接,即尾部的节点要和头部的节点链接单向链表操作1、链表是否...
    99+
    2023-05-16
    Python
  • python双向循环链表怎么实现
    本文小编为大家详细介绍“python双向循环链表怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“python双向循环链表怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向循环链表: 将所有的数据存...
    99+
    2023-06-30
  • C语言如何实现双向链表和双向循环链表
    本文小编为大家详细介绍“C语言如何实现双向链表和双向循环链表”,内容详细,步骤清晰,细节处理妥当,希望这篇“C语言如何实现双向链表和双向循环链表”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。双向链表和双向循环链表...
    99+
    2023-06-16
  • 【链表问题】环形单链表约瑟夫问题
    前言以专题的形式更新刷题贴,欢迎跟我一起学习刷题,相信我,你的坚持,绝对会有意想不到的收获。每道题会提供简单的解答,如果你有更优雅的做法,欢迎提供指点,谢谢【题目描述】【要求】输入:一个环形单向链表的头节点 head 和报数 m.返回:最后...
    99+
    2023-06-02
  • Java环形链表(图文详解)
    目录 一、判断链表中是否有环 (1)题目描述 (2)题解 二、环形链表的入环节点 (1)题目描述 (2)题解 一、判断链表中是否有环 (1)题目描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通...
    99+
    2023-09-30
    java 链表 数据结构 算法
  • C++和python如何实现单链表
    这篇文章给大家分享的是有关C++和python如何实现单链表的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、链表的基本概念链表是数据元素的线性集合(Linear Collection),物理存储不连续。那么,这...
    99+
    2023-06-29
  • Python实现链表
    单链表: # -*- coding:utf-8 -*- class Node(object): """节点""" def __init__(self,elem): self.elem = elem ...
    99+
    2023-01-31
    链表 Python
  • C++如何实现带头双向循环链表
    这篇文章主要为大家展示了“C++如何实现带头双向循环链表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C++如何实现带头双向循环链表”这篇文章吧。什么是带头双向循环链表什么是带头?双向?循环?(...
    99+
    2023-06-29
  • python 实现线性链表(单链表)
    初学python,拿数据结构中的线性链表存储结构练练手,理论比较简单,直接上代码。 #!/usr/bin/python # -*- coding:utf-8 -*- # Author: Hui # Date: 2017-10-13...
    99+
    2023-01-31
    链表 线性 python
  • Go中怎么遍历环形链表
    在Go中遍历环形链表可以通过两种方法实现: 快慢指针法:使用两个指针,一个慢指针每次移动一步,一个快指针每次移动两步。如果链表中有...
    99+
    2024-04-03
    Go
  • golang如何实现链表
    实现链表的方法:1、定义了一个Node结构体来表示链表的节点,每个节点包含一个数据项和一个指向下一个节点的指钁;2、定义了一个LinkedList结构体来表示链表本身,其中包含一个指向链表头节点的指针;3、实现了两个方法,append用于在...
    99+
    2023-12-14
    Golang 链表
  • python如何实现单向链表及单向链表的反转
    链表的定义 链表中的每个节点会存储相邻节点的位置信息,单链表中的每个节点只存储下一关节点的位置信息 单向链表的实现 class ListNode: def __init_...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作