python 双向链表

news2024/11/16 23:59:48

双向链表基本介绍 

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

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

"""
双向链表的增删改查
"""


# 英雄类
class HeroNode:
    next = None  # 指向下一个节点,默认为空
    pre = None  # 指向前一个节点,默认为空

    def __init__(self, id: int, name: str, nick_name: str):
        self.id = id  # 英雄ID
        self.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("链表为空...")
            return

        temp = 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.head
        while temp.next:
            temp = temp.next

        # 结束循环时,temp 指向链表最后一个节点
        # 将要添加的节点插入到链表中
        temp.next = node
        node.pre = temp

    # 修改链表的某个节点
    def update(self, new_node: HeroNode):
        # 判断链表是否为空
        if not self.head.next:
            print("链表为空...")
            return

        # 找到要修改的链表节点
        temp = self.head.next
        flag = False  # 标记是否找到该节点
        while temp:
            if temp.id == new_node.id:
                flag = True
                break
            temp = temp.next

        if flag:
            # 找到了要修改的节点,即为 temp
            temp.name = new_node.name
            temp.nick_name = new_node.nick_name
        else:
            print(f"没有找到编号为{new_node.id}的节点:")

    # 双向链表删除节点
    def delete(self, node: HeroNode):
        # 判断链表是否为空
        if not self.head.next:
            print("链表为空...")
            return

        # 找到要删除节点在链表中的位置
        temp = self.head.next
        flag = False
        while temp:
            if temp.id == node.id:
                flag = True
                break
            temp = temp.next

        if flag:
            # 找到了要删除的节点,即为 temp
            temp.pre.next = temp.next
            if temp.next:  # temp 不是最后一个节点
                temp.next.pre = temp.pre
        else:
            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://www.coloradmin.cn/o/936495.html

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

相关文章

STM32 CubeMX (H750)RGB屏幕 LTDC

STM32 CubeMX STM32 RGB888 LTDC STM32 CubeMX一、STM32 CubeMX 设置时钟树LTDC使能设置屏幕参数修改RGB888的GPIO 二、代码部分效果 RGB屏幕线束定义: 一、STM32 CubeMX 设置 时钟树 这里设置的时钟,关于刷新速度 举例子:LCD_CLK24MHz 时…

福利之舞:员工的心跳与企业的平衡术

引言:员工福利与满意度的关系 在现代企业中,员工福利已经不仅仅是一种待遇,而是与员工满意度、忠诚度和生产力紧密相连的关键因素。一个合理且吸引人的福利制度可以大大提高员工的工作积极性,同时也能够吸引和留住顶尖的人才。但…

ElasticSearch(一)数据类型

ElasticSearch&#xff08;一&#xff09;数据类型 1.简述 Es数据类型分为基础数据类型和复杂类型数据&#xff0c;掌握ES数据类型才能进一步使用ES检索数据内容。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot…

【MySQL系列】Select语句单表查询详解入门(SELECT,AS,模糊查询,运算符,逻辑运算符)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

【80天学习完《深入理解计算机系统》】第十一天 3.5 过程(函数调用)

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…

【JAVA】String 类

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; String 1. 字符串构造2. String对象的比…

快速封禁大法--东方日报JS解密过程

破解难点&#xff1a; 1.所有接口参数都有时间限制&#xff0c;且与当前加载页面绑定&#xff0c;参数无法在短期内复用 2. token参数破解&#xff1a;点击翻页时第一个加载的接口&#xff0c;会返回一个token&#xff08;详见&#xff1a;get_token() 函数内容&#xff09; 3.…

lab8 lock

PreRead 第六章3.5节&#xff1a;物理内存分配器8.1-8.3 文章目录 PreReadMemory allocatortaskshints思路 Buffer cachetaskhints思路实现 这次的lab&#xff0c;本质上都是通过将锁的粒度减小来获得性能的提升 第一个task&#xff0c;可以简单地按cpu划分&#xff0c;因为本…

Python Opencv实践 - Sobel边缘检测

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_GRAYSCALE) print(img.shape)#Sobel边缘检测 #cv.sobel( src, ddepth, dx, dy[,ksize[, scale[, delta[, borderType]]]] ) #src:…

当面临在职备考不确定性的结果时,你可能需要闭着眼冲一下

提前批面试在某种程度上像是联考分流幕后的那只无形之手&#xff0c;既助长了拿到优秀资格考生的备考热情&#xff0c;又打击了提面落榜考生的笔试自信心。就在这样的局面下&#xff0c;使得项目最终完成了联考前的分流操作。但如果你还是遵从自己的本心的话&#xff0c;就应该…

算法-图BFS/DFS-单词接龙

算法-图BFS/DFS-单词接龙 1 题目概述 1.1 题目出处 https://leetcode-cn.com/problems/number-of-islands 1.2 题目描述 给定两个单词&#xff08;beginWord 和 endWord&#xff09;和一个字典&#xff0c;找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如…

2023年6月GESP C++ 三级试卷解析

2023年6月GESP C 三级试卷解析 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 1.高级语言编写的程序需要经过以下&#xff08; &#xff09;操作&#xff0c;可以生成在计算机上运行的可执行代码。 A.编辑 B.保存 C.调试 D.编译 【答案】D 【考纲知识点…

LeetCode-406-根据身高重建队列

题目描述&#xff1a; 假设有打乱顺序的一群人站成一个队列&#xff0c;数组 people 表示队列中一些人的属性&#xff08;不一定按顺序&#xff09;。每个 people[i] [hi, ki] 表示第 i 个人的身高为 hi &#xff0c;前面 正好 有 ki 个身高大于或等于 hi 的人。 请你重新构造…

IDEA项目启动的时候找不到类

IDEA项目启动的时候找不到类 我在运行微服务的项目的时候启动多个项目由于存在依赖关系&#xff0c;但是我确实是引入了对应的依赖的地址但是就是找不到对应的类。 解决的方法&#xff1a;

代码随想录算法训练营第四十八天|LeetCode 583,72,编辑距离总结篇

目录 LeetCode 583.两个字符串的删除操作 动态规划五步曲&#xff1a; 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历方向 5.打印dp数组 LeetCode 72.编辑距离 动态规划五步曲&#xff1a; 1.确定dp[i][j]的含义 2.找出递推公式 3.初始化dp数组 4.确定遍历方…

模2运算规则

模2加法 模2加法没有进位&#xff0c;等同于异或运算。一位数的模2加法规则如下&#xff1a; 0 0 0 0 1 1 1 0 1 1 1 0 多位数的模2加法中&#xff0c;每一位都按照上面的规则进行&#xff0c;例如: 当多个数相加&#xff0c;对应位置上如果有偶数个1&#xff0c;…

【OpenCV实战】3.OpenCV颜色空间实战

OpenCV颜色空间实战 〇、Coding实战内容一、imread1.1 函数介绍1.2 Flags1.3 Code 二. 色彩空间2.1 获取单色空间2.2. HSV、YUV、RGB2.3. 不同颜色空间应用场景 〇、Coding实战内容 OpenCV imread()方法不同的flags差异性获取单色通道【R通道、G通道、B通道】HSV、YUV、RGB 一…

基于学生心理学算法优化的BP神经网络(预测应用) - 附代码

基于学生心理学算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于学生心理学算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.学生心理学优化BP神经网络2.1 BP神经网络参数设置2.2 学生心理学算法应用 4.测试结果&…

证券低延时环境设置并进行性能测试

BIOS设置BIOS参考信息 关闭 logical Process Virtualization Technology 在System Profiles Settings 中System Profile 选择Performance Workload Profile 选择HPC Profile OS中信息参考在/etc/default/grub文件中添加 intel_idle.max_cstate=0 processor.max_cstate=0 idle=p…

使用Easy Chm制作chm文档步骤

前言 软件发布后需要相应的文档说明&#xff0c;CHM是微软新一代的帮助文件格式&#xff0c;利用HTML作源文&#xff0c;把帮助内容以类似数据库的形式编译储存。因为使用方便&#xff0c;形式多样也常被采用作为电子书的格式&#xff1b; 制作类似的chm文档可以使用Easy Chm软…