python 双向链表

双向链表基本介绍 

双向链表增删改查操作思路分析

 双向链表增删改查操作代码实现

"""
双向链表的增删改查
"""# 英雄类
class HeroNode:next = None  # 指向下一个节点,默认为空pre = None  # 指向前一个节点,默认为空def __init__(self, id: int, name: str, nick_name: str):self.id = id  # 英雄IDself.name = name  # 英雄名字self.nick_name = nick_name  # 英雄昵称def __str__(self):return f"[{self.id}, {self.name}, {self.nick_name}]"# 双向链表类
class DoubleLinkedList:# 初始化头结点,头结点用于指向一个链表的位置,不存放具体的数据head = HeroNode(0, "", "")# 返回链表的头结点def getHead(self):return self.head# 双向链表的遍历def for_double_lined_list(self):# 判断链表是否为空if not self.head.next:print("链表为空...")returntemp = self.head.next  # 获取链表的第一个数据节点while temp:  # 如果节点不为空(表示还没到链表的最后一个节点)end = " -> " if temp.next else ""print(temp, end=end)  # 打印节点temp = temp.next  # 继续遍历下一个节点print()# 向链表中添加元素(在链表的末尾添加)def add(self, node: HeroNode):# 找到链表的最后一个节点temp = self.headwhile temp.next:temp = temp.next# 结束循环时,temp 指向链表最后一个节点# 将要添加的节点插入到链表中temp.next = nodenode.pre = temp# 修改链表的某个节点def update(self, new_node: HeroNode):# 判断链表是否为空if not self.head.next:print("链表为空...")return# 找到要修改的链表节点temp = self.head.nextflag = False  # 标记是否找到该节点while temp:if temp.id == new_node.id:flag = Truebreaktemp = temp.nextif flag:# 找到了要修改的节点,即为 temptemp.name = new_node.nametemp.nick_name = new_node.nick_nameelse:print(f"没有找到编号为{new_node.id}的节点:")# 双向链表删除节点def delete(self, node: HeroNode):# 判断链表是否为空if not self.head.next:print("链表为空...")return# 找到要删除节点在链表中的位置temp = self.head.nextflag = Falsewhile temp:if temp.id == node.id:flag = Truebreaktemp = temp.nextif flag:# 找到了要删除的节点,即为 temptemp.pre.next = temp.nextif temp.next:  # temp 不是最后一个节点temp.next.pre = temp.preelse:print(f"没有找到编号为{node.id}的节点")# 双向链表增删改查功能测试
def test_double_linked_list():# 创建四个英雄节点node1 = HeroNode(1, "宋江", "及时雨")node2 = HeroNode(2, "卢俊义", "玉麒麟")node3 = HeroNode(3, "吴用", "智多星")node4 = HeroNode(4, "林冲", "豹子头")# 创建一个双向链表的实例对象double_linked_list = DoubleLinkedList()# 查看链表double_linked_list.for_double_lined_list()# 想链表添加节点double_linked_list.add(node1)double_linked_list.add(node2)double_linked_list.add(node3)double_linked_list.add(node4)double_linked_list.for_double_lined_list()# 修改new_node = HeroNode(4, "公孙胜", "入云龙")double_linked_list.update(new_node)double_linked_list.for_double_lined_list()# 删除double_linked_list.delete(node3)double_linked_list.for_double_lined_list()test_double_linked_list()

 

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

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

相关文章

小马哥的CSS驿站

目录 第一章 CSS概述 1.1语法 1.2注释 1.3CSS的创建 第二章 CSS选择器 1.id选择器 2.class选择器 3.标签选择器 4.子代选择器 5.后代选择器 6.相邻兄弟选择器 7.后续兄弟选择器 8.交集选择器 9.并集选择器 第三章 CSS样式 1.文本与文字样式 (1&…

35 岁财务自由的小马哥,我想跟他学学!

如果说 Java 工程师,有什么一定要“死磕”拿下的东西,那一定是 Spring 无疑了。 众所周知,Spring 无论在 Java 生态系统,还是在就业市场,是绝对的王者。Spring AOP 作为 Spring 框架的核心内容之一,其重要性…

计算机网络(速率、宽带、吞吐量、时延、发送时延)

速率: 最重要的一个性能指标。 指的是数据的传送速率,也称为数据率 (data rate) 或比特率 (bit rate)。 单位:bit/s,或 kbit/s、Mbit/s、 Gbit/s 等。 例如 4 1010 bit/s 的数据率就记为 40 Gbit/s。 速率往往是指额定速率或…

什么盒模型

一、盒模型 1.什么是盒模型 在我们HTML页面中,每一个元素都可以被看作一个盒子,而这个盒子由:内容区(content)、填充区(padding)、边框区(border)、外边界区&#xff0…

1.1 编辑楼层标高

在任意视图内批量编辑楼层。点击 按钮,弹出楼层管理器界面,可以对模型中已有的楼层高度进行修改、批量修改楼层名称。在创建楼层时,可以设定起始楼层序号,后续楼层将自动排序,当前文件中的新建楼层在“确定”完成前允许自由删除操…

2.3 轴生墙

按照已创建的弧形/ 直线轴生成墙。点击 按钮,弹出轴线生墙对话框,如图所示:在基本墙中选择需要添加的墙类型,在顶高和底高中选择楼层,并可以勾选是否按楼层切分墙。可在墙上定位线中选择墙的中心或者外边缘等为定位线…

3.5 连接管线

通过Revit管线建模功能,或是通过翻模软件创建的管线往往是不连接的,如果要把它们连接起来很费力,同时也不容易指定连接的角度。模盒提供的连接管线”功能可以很好地连接各种管线,并根据所选管线的空间位置,智能提示可以…

1.7 删轴线

点击 按钮,选择任意需要删除的轴线即可完成删除,与已删除轴线同组的后续众轴线编号会自动向前进位,以保持轴网编号的连续性。 先图AGI模盒下载地址: 先图官网:http://www.agicloud.com 安装下载(腾讯微云&a…

Retina时代的前端视觉优化

随着New iPad的发布,平板也将逐渐进入Retina时代,在高分辨率设备里图片的显示效果通常不尽人意,为了达到最佳的显示效果就需要对图片进行优化,这里介绍一些优化方法: 一、用CSS替代图片 这一点在任何时候都适用&#x…

3.4 分割管线

Revit中创建的管线为与实际施工结合,往往需要按指定的安装长度进行打断。按照传统手段进行打断,效率低下。可以通过模盒提供的批量分割打断管线功能,对机电的管线进行一次性打断。 可以打断的机电管线包括:风管、水管和桥架。 点击…

盒模型。。

css盒模型的概述: css盒模型(Box Model)规定了元素处理元素内容、内边距、边框、外边距、的方式 这个是盒模型的模型图 盒模型各部分说明: content:是盒子的内容 显示文本图像 padding:是盒子的内边距 …

2.4 标准柱

点击 按钮,弹出标准柱对话框,如图所示:在已创建的轴网角度处创建柱。可选择柱类型, 可同时创建跨多层柱子,并可选是否按照楼层切分柱。支持各种偏移,自定义偏心距离以及旋转角度的设置。可以点击最下方三个…

2.19 一键扣减

Revit建模后,各构件会存在互相重叠的情况,像结构柱与梁的重叠。由于实际施工不会出现重合的情况,因此模型的真实程序会降低,同时在后续的算量过程中会重复计算重合部分,计算结果不能精确。为此,模盒提供了“…

1.2 创建矩形轴网

点击 按钮,弹出矩形轴网对话框,如图所示:直接添加轴线间距生成轴网,轴网自动标注,轴网自动编号,自定义轴号编号原则(加前缀和后缀),自定义标注样式,可选择规…

盒模型.

CSS盒模型概述:CSS盒模型(Box Model)规定了元素处理元素内容(content)、内边距(padding)、边框(border)、外边距(margin)的方式。 下图为盒模型模型图。 盒模型各部分说…

4.1 建筑翻模

筑翻模功能可以将DWG文件中的二维图线对象:轴网、墙、柱、门、窗、柱子、房间文字快速转换成Revit模型对象,翻模速度快,准确率高。 与先前的模盒翻模功能不同,建筑翻模不再需要在AutoCAD中提取模型的图线,所有操作在Re…

【盒模型】什么是盒模型

盒模型在前端的作用及概念: 在前端中盒模型可谓是十分重要的,它是CSS进行页面加载的基石,在页面CSS布局中盒模型规定了网页元素如何排列显示以及元素之间的相互关系。在H5中CSS样式定义所有元素都可以拥有像盒子一样的平面空间和外形。 (如下图所示)整…

盒 模 型

html中盒模型的学习 文章目录 目录 前言 什么是盒模型? 思维导图: 盒模型的组成 padding 内边框 border 边框 margin 外边框 前言 哈喽同学们大家好,本节我们开始学习html5基础部分------盒模型相关知识 作为基础章节,盒模型…

先图科技的AGI模盒发布了!

AGI模盒是北京先图科技有限公司开发的一款Revit实用插件,用于快速准确地创建和修改建筑、结构、机电的三维模型,智能根据AutoCAD图纸进行快速翻模,并提供在线族库管家供广大工程师下载。 (1) 专业功能助您快速建模,生成符合施工要…

利用 IDEA IDE 的轻量编辑模式快速查看和编辑工程外的文本文件

作为程序员, 我们都知道 IDE 的很好用的, 它的文本编辑器功能也非常的强大, 用起来非常便捷. 在长年累月的使用中, 我们也变得对其非常熟悉, 以致于使用起其它简单地轻量级的文本编辑器来, 比如什么记事本, Notepad, UltraEdit 等等呀, 觉得既不方便又不熟悉. 关键是很多的操作…