python 实现链表

链表基础知识

链表是在物理内存中不连续,数据通过链表中的指针来链接到下一个元素。

链表由一系列节点组成,节点在运行时动态生成,节点一般包括两个部分:存储数据的数据域,存储下一个节点的指针域

链表的常用操作:节点的插入和删除。节点一般包括一个根节点,其他节点都是根据根节点生成。

单链表

# 链表的创建
#第一次加入加入节点,链表为空 ,第二次加入节点,先找到原有链表的最后一个节点
# 怎么判断到最后一个节点,但节点指向为空的时候则判断该节点为最后一个节点# 节点类
class ListNode:def __init__(self,val=0,next=None):self.val=valself.next=nextclass LinkedList:# 初始化def __init__(self):self.head=None  #头节点指向为空# 创建一个链表def create(self,data):self.head=ListNode(0)  #定义一个头节点cur=self.headfor i in range(len(data)):node=ListNode(data[i])  #一个新的节点cur.next=node  #头节点指向新的节点cur=cur.next  #更新# 获取链表的长度def length(self):count=0cur=self.head  #当前节点while cur: #遍历节点,当节点为None的时候表示当前节点为空count+=1#更新节点cur=cur.nextreturn count# 添加元素def insert(self,index,val):#在头部 尾部 中间添加#首先定义一个新的节点node=ListNode(val)if index==0:#表示在头部插入元素node.next=self.headself.head=nodeelif index==self.length()-1:# 表示在尾部插入元素#定义一个指针表示当前节点cur=self.head #当前节点从头节点开始while cur.next:cur=cur.nextcur.next=nodeelif index>0 and index<self.length()-1:#在中间插入节点cur=self.headcount=0while cur and count<index-1: #当前节点不是尾节点count+=1cur=cur.nextnode.next=cur.nextcur.next=nodeelse:print('插入位置超出索引')#删除元素def remove(self,index):pass#修改元素def change(self,index,val):pass#打印链表def display(self):cur=self.headcount=0while cur:print('第{}个节点,值为{}'.format(count,cur.val))count+=1cur=cur.next
# 链表的创建
#第一次加入加入节点,链表为空 ,第二次加入节点,先找到原有链表的最后一个节点
# 怎么判断到最后一个节点,但节点指向为空的时候则判断该节点为最后一个节点# 节点类
class ListNode:# 定义节点类,包含数据域和指针域def __init__(self,data=None,next=None):self.data=data #节点的数据域self.next=next  #指向下一个节点的指针class LinkedList:# 初始化def __init__(self):self.head=None  #头节点指向为空# 创建一个链表def create(self,data):self.head=None  #定义一个头节点current=self.head  #当前节点#遍历data,给每一个节点赋值,并且指向下一个节点for _ in data:#创建一个新的节点类node=ListNode(_)if current is None:#如果当前节点是空,表示是头节点为空current=self.head=nodeelse:current.next=nodecurrent=current.nextreturn self.head#打印链表的长度def Len_Link(self):count=0current=self.headwhile(1):if current is not None:  #判断是不是尾节点,如果不是则链表长度加1count+=1current=current.nextelse:break# print('共有{}个节点'.format(count))return count#打印链表def display(self):print('开始打印链表')current=self.headcount=0while current:count+=1print("第{}个节点".format(count),current.data)current=current.next#插入一个节点def insert(self,index,data):lenth=self.Len_Link()node=ListNode(data)current=self.headif index==0+1:#插入头节点if current :#头节点不为空node.next=currentself.head=nodeelse:#头节点为空self.head=nodeelif index==lenth+1:#在尾部插入节点while current:if current.next is None:current.next=nodebreakelse:current = current.nextelif index<=lenth and index>0:count=0while current:count+=1if count==index:node.next=current.nextcurrent.next=nodebreakelse:current=current.nextreturn self.headdef remove(self,index):#删除一个节点#删除头节点lenth=self.Len_Link()current=self.headif index==1:if current is None:passelse:current=current.nextself.head=currentelse:#删除尾节点count=0while current:count+=1if count==index-1:current.next=Nonebreakelse:current=current.nextreturn self.headif __name__=='__main__':data=[1,2,3,4]#定义一个链表a=LinkedList()a.create(data)#打印一个链表a.display()#链表的长度a.Len_Link()#插入一个节点a.insert(3,15)a.display()#插入一个节点a.insert(1,10)a.display()#定义一个空链表a=LinkedList()a.insert(1,100)a.display()#在尾部插入一个节点a.insert(2,1000)a.display()a.insert(1,10)a.display()#删除头部节点a.remove(1)a.display()#删除尾部节点a.remove(2)a.display()

 

参考:

链表基础知识详解(非常详细简单易懂)-CSDN博客

链表python基础知识_python链表长度-CSDN博客

Python编写单链表_python 单链表是什么-CSDN博客

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

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

相关文章

Mysql数据库多表数据查询问题

1、背景 线上某个业务数据分表存储在10个子表中&#xff0c;现在需要快速按照条件&#xff08;比如时间范围&#xff09;筛选出所有的数据&#xff0c;主要是想做一个可视化的数据查询工具&#xff0c;给产研团队使用。 2、实践 注意&#xff1a;不要在线上真实数据库操作&am…

zookeeper集群+kaafka集群

kafka3.0之前依赖于zookeeper zookeeper开源&#xff0c;分布式的架构&#xff0c;提供协调服务&#xff08;Apache项目&#xff09; 基于观察者模式涉及的分布式服务管理架构 存储和管理数据&#xff0c;分布式节点上的服务接受观察者的注册&#xff0c;一旦分布式节点上的…

【网络安全技术】消息认证技术

一、哈希函数 1.安全性质 1&#xff09;抗第一原像攻击&#xff08;Preimage Resistance&#xff09; 给定哈希后的值&#xff0c;很难找到哈希前的原消息。这很好理解&#xff0c;需要哈希函数具有单向性。 一个简单的例子就是密码存储系统&#xff0c;用户登录服务器需要…

使用dirmap命令行时报错,提示缺少gevent模块

记得以前是可以的&#xff0c;可能是时间长了重装了系统&#xff0c;引起的。 修复方法。升级pip&#xff0c;然后重新下载安装gevent模块。 具体&#xff1a; 使用下面命令解决下载慢的问题。 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple …

python中,or、not的用法

or的用法 在python中,or运算符是一个逻辑运算符&#xff0c;用于在多个条件中选择至少一个为真&#xff08;True&#xff09;的情况。 如果条件中的任意一个为真&#xff0c;整个表达式的结果就为真 如&#xff1a; 示例1: 检查两个数字中至少有一个正数 示例2: x True y …

使用系统ProgressBar实现三色进度条

使用系统ProgressBar实现如图三色进度条&#xff1a; //布局中<ProgressBarandroid:layout_width"0dp"android:layout_height"8dp"android:layout_marginLeft"16dp"app:layout_constraintBottom_toBottomOf"id/photo"app:layout_c…

Linux 权限管理

1 Linux 安全模型 AAA认证资源分派&#xff1a; 当用户登录时&#xff0c;系统会自动分配令牌 token&#xff0c;包括用户标识和组成员等等信息 1.1 用户 Linux 中每个用户是通过 User ID&#xff08;UID&#xff09;来唯一标识的。 1.2 用户组 Linux 中可以将一个或者多个…

OOM了?物理内存不够了?试试这个方法来提升内存容量,不花钱的

通过增加虚拟内存来提高内存使用 本文解决的实际问题&#xff1a; 当我们物理内存小的时候&#xff0c;会出现OOM&#xff0c;然后服务自动死掉的情况。因为物理内存大小是固定的&#xff0c;有没有其他好的办法来解决呢&#xff1f;这里我们可以适当调整Linux的虚拟内存来协作…

spring cloud gateway源码分析,一个请求进来的默认处理流程

1.前言 spring cloud gateway的基本组成和作用就不细赘述&#xff0c;此篇适合对此有一定了解的人阅读。 spring cloud gateway版本: Hoxton.SR1 spring cloud gateway的配置使用yml配置&#xff1a; server:port: 9527y#根据微服务名称进行动态路由的配置 spring:applicati…

【Amazon】通过代理连接的方式导入 AWS EKS集群至KubeSphere主容器平台

文章目录 一、设置主集群方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 二、在主集群中设置代理服务地址方式一&#xff1a;使用 Web 控制台方式二&#xff1a;使用 Kubectl命令 三、登录控制台验证四、准备成员集群方式一&#xff1a;使用 Web 控制台…

linux上编写进度条

目录 一、预备的两个小知识1、缓冲区2、回车与换行 二、倒计时程序三、编写入门的进度条四、编写一个正式的五、模拟实现和下载速度相关的进度条 一、预备的两个小知识 1、缓冲区 首先认识一下缓冲区&#xff1a;先写一个.c文件如下&#xff1a; 我们执行一下这个程序时&…

如何在vs2019及以后版本(如vs2022)上添加 添加ActiveX控件中的MFC类

有时候我们在MFC项目开发过程中&#xff0c;需要用到一些微软已经提供的功能&#xff0c;如VC使用EXCEL功能&#xff0c;这时候我们就能直接通过VS2019到如EXCEL.EXE方式&#xff0c;生成对应的OLE头文件&#xff0c;然后直接使用功能&#xff0c;那么&#xff0c;我们上篇文章…

索尼PMW580视频帧EC碎片重组开启方法

索尼PMW580视频帧EC碎片重组开启方法 索尼PMW-580摄像机生成的MXF文件存在严重的碎片化&#xff0c;目前CHS零壹视频恢复程序MXF版、专业版、高级版已经支持重组结构体正常的碎片&#xff0c;同时也支持对于结构体破坏或者覆盖后仅存在音视频帧EC数据的重组&#xff0c;需要注…

次世代建模纹理贴图怎么做?

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 1、什么是次时代建模&#xff1f; "次世代建模"是一个术语&#xff0c;通常用来描述…

边缘数据中心和5G的融合彻底改变数据传输和物联网

伴随着数字化时代的飞速发展&#xff0c;边缘数据中心和5G技术的联袂崛起&#xff0c;正深刻塑造着人们对数据的创造、传输和处理方式。据Gartner公司的预测&#xff0c;到2025年&#xff0c;企业数据的三分之二将在边缘计算设施中涌现&#xff0c;而非传统的集中式数据中心。这…

抑郁症中西医治疗对比?

抑郁症是一种常见的心理障碍&#xff0c;治疗方法包括中医和西医两种。下面就抑郁症中西医治疗进行对比&#xff1a; 治疗方法&#xff1a;中医治疗抑郁症强调整体观念和辨证论治&#xff0c;通过调理身体各部分的功能&#xff0c;达到治疗抑郁症的目的。中医治疗抑郁症多采用天…

【数据结构】循环链表和双向链表

【循环链表】 (有头结点) pR1->next; R1->nextR2->next->next; free(R2->next); R2->nextp; 例&#xff1a;对于两个单循环链表a&#xff0c;b&#xff0c;将其连接起来&#xff0c;变成一个单循环链表 #include<stdio.h> #include<stdlib.h> …

【动态规划】LeetCode-62.不同路径

&#x1f388;算法那些事专栏说明&#xff1a;这是一个记录刷题日常的专栏&#xff0c;每个文章标题前都会写明这道题使用的算法。专栏每日计划至少更新1道题目&#xff0c;在这立下Flag&#x1f6a9; &#x1f3e0;个人主页&#xff1a;Jammingpro &#x1f4d5;专栏链接&…

数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)

目录 一.什么是链表 二.链表的实现 节点的插入 头插法 尾插法 指定位置插入 节点的删除 删除第一次出现的关键字节点 删除所有关键字节点 节点的查找 链表的清空 链表的长度 前言&#xff1a;在上一篇文章中&#xff0c;我们认识了线性数据结构中的顺序表&#xff0…

K8s 中 Pod OOMKilled 原因

目录 Exit Code 137 解决方案 JVM 感知 cgroup 限制 使用 JDK9 的容器感知机制尝试 问题分析 容器内部感知 CGroup 资源限制 在 Java10 中&#xff0c;改进了容器集成 JVM 参数 MaxDirectMemorySize -XX:MaxDirectMemorySize 的默认值是什么&#xff1f; 其他获取 ma…