Python-链表数据结构学习(1)

一、什么是链表数据?
链表是一种通过指针串联在一起的数据结构,每个节点由2部分组成,一个是数据域,一个是指针域(存放下一个节点的指针)。最后一个节点的指针域指向null(空指针的意思),链表的入口节点称为链表的头结点也就是head
链表结构如下图在这里插入图片描述
二、链表的类型
1、单链表每个节点的指针指向一个方向,只可单方向查询数据,如上图所示。
2、双链表,每个节点可以有2个指针域,既可指向下一个节点,也可指向上一个节点,双链表既可以向前查询,也可以向后查询。
如图在这里插入图片描述3、循环链表:链表首尾相连,可以用来解决约瑟夫环问题。如图
在这里插入图片描述三、链表的存储方式
链表的存储于数组不同,数组在空间中可以是连续的,而链表是通过指针域的指针将不连续的数据存储在空间各个节点中的,因此指针节点在链表数据的应用中非常关键。所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。
四、链表的定义
了解了链表的结构组成,我们来了解一下链表的Python 实现,链表作为一个类,他需要构造。

class ListNode:def __init__(self, val, next=None):##定义一个列表函数,包含数据值和指针()self.val = val #定义列表节点的self.val为valself.next = next #定义列表指针的self.next为next

五、常见的链表操作
1、删除节点在这里插入图片描述
如图想要删除D节点,就要先将D节点上一个指针指向E节点,在Python语言中,会自动将D节点释放掉,此时就可以删除D节点了。
2、节点添加
在这里插入图片描述如图想要在D节点前添加F节点,需要先把C节点指向F节点,然后再把F节点的指针指向D节点,在这个过程中Python系统会自动释放C到D的指针指向。

链表的增添和删除都是O(1)操作,也不会影响到其他节点。

但是要注意,要是删除第五个节点,需要从头节点查找到第四个节点通过next指针进行删除操作,查找的时间复杂度是O(n)。
六、链表和数组操作比较
在这里插入图片描述
数组在定义的时候,长度就是固定的,如果想改动数组的长度,就需要重新定义一个新的数组。

链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。

Leetcode203题在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def removeElements(self, head: Optional[ListNode], val: int) -> Optional[ListNode]:cur=dummy=ListNode(next=head) ##构建一个虚拟哨兵节点,使得他的指针指向头结点while cur.next: ##当当前节点的指针存的时候if cur.next.val==val: ##如果当前节点的下一个节点的值等于指定的值,cur.next=cur.next.next #则删除下一个节点else:cur=cur.next #否则当前链表向下一个节点移动return dummy.next #返回链表(因为dummy是头结点前的一个虚拟节点,所以返回的是dummy.next)

在这里插入图片描述

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next
class Solution:def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:cur=headpre=Nonewhile cur:tem=cur.next##保存cur后续数据cur.next=pre##cur指针方向改变pre=cur ##把当前的cur付给pre,进行下一次循环cur=tem ##把之前保存的cur后续数据再赋值给当前的cur,进行下一次循环return pre

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

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

相关文章

电脑插入耳机和音响,只显示一个播放设备

1. 控制面板-硬件和声音-Realtek高清音频-扬声器-设备高级设置-播放设备里选择使用前部和后部输出设备同时播放两种不同的音频流 在声音设置中就可以看到耳机播放选项

ISAAC SIM踩坑记录--添加第三方3D场景

ISAAC SIM仿真首先就是要有合适的3D场景,官方提供了一些场景,如果不能满足要求,那就只能自己建。 对于我这种不会3D建模的菜鸟,只能到网上下载了,sketchfab就是一个不错的平台,有不少免费资源可以下载。 …

CentOS 9 配置静态IP

文章目录 1_问题原因2_nmcli 配置静态IP3_使用配置文件固定IP4_重启后存在的问题5_nmcli 补充 1_问题原因 CentOS 7 于 2014年6月发布,基于 RHEL 7,并在 2024年6月30日 结束维护。 CentOS 9 作为目前的最新版本,今天闲来闲来无事下载下来后…

C++趣味编程玩转物联网:基于树莓派Pico控制无源蜂鸣器-实现音符与旋律的结合

无源蜂鸣器是一种多功能的声音输出设备,与有源蜂鸣器相比,它能够通过不同频率的方波生成丰富多样的音调。本项目使用树莓派Pico开发板,通过编程控制无源蜂鸣器播放经典旋律《归来有风》。本文将详细介绍项目实现中的硬件连接、C++代码解析,以及无源蜂鸣器的工作原理。 一、…

【AI模型对比】Kimi与ChatGPT的差距:真实对比它们在六大题型中的全面表现!

文章目录 Moss前沿AI语义理解文学知识数学计算天文学知识物理学知识英语阅读理解详细对比列表总结与建议 Moss前沿AI 【OpenAI】获取OpenAI API Key的多种方式全攻略:从入门到精通,再到详解教程!! 【VScode】VSCode中的智能AI-G…

Runway 技术浅析(六):文本到视频(Text-to-Video)

1. 核心组件与工作原理 1.1 自然语言处理(NLP) 1.1.1 文本解析与语义理解 文本到视频的第一步是将用户输入的自然语言文本解析为机器可理解的语义信息。Runway 使用预训练的 NLP 模型,如 GPT-3 和 BERT,这些模型通过大规模文本数…

【C++】双温度转换与并联电阻计算的编程题分析与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯从华氏温度到摄氏温度的转换题目背景与华氏温度与摄氏温度的转换初始代码与验证通过的解法代码分析特点与优缺点 老师的代码:结合 C 与 C 的风格代码分析与对比…

【采样率、采样定理、同步和异步采样】

内容来源:【数据采集卡的【采样率】【采样定理】【同步采样】【异步采样】的相关说明】 此篇文章仅作笔记分享。 前言 模拟信号需要通过采样、储存、量化、编码这几个步骤转换成数字信号,本篇文章将会对采样进行一个更详细的说明。 采样 采样就是将一…

笔记本电脑usb接口没反应怎么办?原因及解决方法

笔记本电脑的USB接口是我们日常使用中非常频繁的一个功能,无论是数据传输、充电还是外接设备,都离不开它。然而,当USB接口突然没有反应时,这无疑会给我们的工作和学习带来不小的困扰。下面,我们就来探讨一下笔记本USB接…

linux运维之shell编程

Shell 编程在系统运维中及其重要 1. Shell 编程概述 Shell 是一种命令行解释器,能够执行操作系统的命令。Shell 脚本是一个包含一系列 Shell 命令的文件,它可以被执行,以自动化和批量处理任务。常用的 Shell 类型包括 bash、sh、zsh 等。Shel…

怎么自己创建一个网站? 开发语言首选 java,使用CMS网站内容管理系统是不错的选择

怎么自己创建一个网站 推荐使用 Java CMS 网站内容管理系统,根据网站规划的功能模块,创建不同的页面风格; 文章目录 怎么自己创建一个网站一、规划网站1.1确定网站主题和目的1.2规划网站结构和内容 二、注册域名2.1选择域名注册商2.2 查找并…

小米澎湃OS2跟蜂窝网络相关的设置和调试【功能设计】

界面功能 开发者模式下,支持数据和WLAN网络相关的设置,跟数据有关的主要如下: 蜂窝网络调试 > 5G-A 特性中心始终开启移动数据网络(便于WiFi和数据快速切换,在国外北美运营商有些需求中明确定义要开着&#xff09…

八、Python —— 类、异常处理、模块、包的管理、虚拟环境

文章目录 一、类1.1、类的定义1.2、类变量和实例变量1.3、类的继承 二、异常处理三、模块 和 包3.1、模块和包的概念,以及项目的树形结构3.2、模块和包的使用 (from import)方法一:from 模块 import 变量/函数/类方式二:from 模块 import 变量…

【text2sql】低资源场景下Text2SQL方法

SFT使模型能够遵循输入指令并根据预定义模板进行思考和响应。如上图,、 和 是用于通知模型在推理过程中响应角色的角色标签。 后面的内容表示模型需要遵循的指令,而 后面的内容传达了当前用户对模型的需求。 后面的内容代表模型的预期输出,也…

自适应神经网络架构:原理解析与代码示例

个人主页:chian-ocean 文章专栏 自适应神经网络结构:深入探讨与代码实现 1. 引言 随着深度学习的不断发展,传统神经网络模型在处理复杂任务时的局限性逐渐显现。固定的网络结构和参数对于动态变化的环境和多样化的数据往往难以适应&#…

挑战用React封装100个组件【004】

项目地址 https://github.com/hismeyy/react-component-100 组件描述 组件适用于展示图片的地方,提供了small,medium,large三种大小。可以删除图片,也可以全屏预览图片。 样式展示 前置依赖 今天我们的这个挑战需要用用到了…

基于MobileNet深度学习网络的MQAM调制类型识别matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频&#xff09…

如何使用apache部署若依前后端分离项目

本章教程介绍,如何在apache上部署若依前后端分离项目 一、教程说明 本章教程,不介绍如何启动后端以及安装数据库等步骤,着重介绍apache的反向代理如何配置。 参考此教程,默认你已经完成了若依后端服务的启动步骤。 前端打包命令使用以下命令进行打包之后会生成一个dist目录…

标贝科技受邀出席2024东湖国际人工智能高峰论坛并入选数据要素合作伙伴名单

近日,备受瞩目的2024东湖国际人工智能高峰论坛在中国光谷科技会展中心隆重召开。会议以“智联世界,共创未来”为主题,省市相关单位、专家学者、产学研各界百余家联合体单位齐聚一堂,共话人工智能领域的最新技术及产业发展趋势。会…

QGIS Python插件开发环境搭建--QGIS3.34.11+PyCharm

QGIS Python插件开发环境搭建--QGIS3.34.11PyCharm 安装QGIS启动QGIS并设置为中文启动QGIS Python插件开发中用到的插件安装PyCharm社区版使用Plugin Builder 3生成插件模板加载插件打开QGIS插件路径将自己的插件拷贝到QGIS的python插件路径 使用PyCharm打开插件代码配置Python…