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.hqwc.cn/news/238585.html

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

相关文章

熬夜会秃头——beta冲刺Day4

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标记录beta冲刺Day4团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 一、团队成员会议总结 1、成员工作进…

C语言:写一个函数,输入一个十六进制数,输出相应的十进制数

分析&#xff1a; 当用户运行该程序时&#xff0c;程序会提示用户输入一个十六进制数。用户需要在命令行中输入一个有效的十六进制数&#xff0c;例如&#xff1a;"1A3F"。 接下来&#xff0c;程序调用了名为 xbed 的函数&#xff0c;并将用户输入的十六进制数作…

【翻译】直流电动机的控制

直流电&#xff08;DC&#xff09;电机由于其转矩易于控制&#xff0c;速度控制范围广&#xff0c;已广泛应用于可调速驱动或可变转矩控制中。然而&#xff0c;直流电机有一个主要的缺点&#xff0c;即它们需要机械装置&#xff0c;如换向器和刷子来连续旋转。这些机械部件需要…

《opencv实用探索·六》简单理解图像膨胀

1、图像膨胀原理简单理解 膨胀是形态学最基本的操作&#xff0c;都是针对白色部分&#xff08;高亮部分&#xff09;而言的。膨胀就是使图像中高亮部分扩张&#xff0c;效果图拥有比原图更大的高亮区域。 2、图像膨胀的作用 注意一般情况下图像膨胀和腐蚀是联合使用的。 &…

前端面试高频考点—事件循环Event loop

目录 事件循环 执行步骤 概念讲解 主线程 微任务(micro task) 宏任务(macro task) Event Loop经典例题 这段代码的执行结果是什么&#xff1f; 正确答案&#xff1a; 具体流程&#xff1a; 事件循环 主线程从"任务队列"中读取执行事件&#xff0c;这个过程…

利用 NRF24L01 无线收发模块实现传感器数据的无线传输

NRF24L01 是一款常用的无线收发模块&#xff0c;适用于远程控制和数据传输应用。本文将介绍如何利用 NRF24L01 模块实现传感器数据的无线传输&#xff0c;包括硬件的连接和配置&#xff0c;以及相应的代码示例。 一、引言 NRF24L01 是一款基于 2.4GHz 射频通信的低功耗无线收发…

RHCE学习笔记(RHEL8) - RH294

Chapter Ⅰ 介绍Ansible ansible ansible是一款开源自动化平台 ansible围绕一种无代理架构构建,在控制节点上安装ansible,且客户端不需要任何特殊的代理软件;ansible使用SSH等标准协议连接受管主机,并在受管主机上运行代码或命令来确保他们处于ansible指定的状态 Ansible帮…

[每周一更]-(第75期):Go相关粗浅的防破解方案

Go作为编译语言&#xff0c;天然存在跨平台的属性&#xff0c;我们在编译完成后&#xff0c;可以再不暴露源代码的情况下&#xff0c;运行在对应的平台中&#xff0c;但是 还是架不住有逆向工程师的反编译、反汇编的情形&#xff1b;&#xff08;当然我们写的都不希望被别人偷了…

oops-framework框架 之 创建项目(二)

引擎&#xff1a; CocosCreator 3.8.0 环境&#xff1a; Mac Gitee: oops-game-kit 构建 本篇博客将使用oops-game-kit 构建一个新的开发项目&#xff0c; 关于 oops-framework 框架的了解&#xff0c;可参考上篇博客&#xff1a; oops-framework框架 之 初始了解(一) 大概…

『 Linux 』环境变量

文章目录 &#x1f680;什么是环境变量&#x1f680;&#x1f680;查看环境变量&#x1f680;&#x1f579;️和环境变量有关的命令&#x1f579;️ &#x1f680;PATH环境变量&#x1f680;&#x1f579;️设置PATH环境变量&#x1f579;️ &#x1f680;HOME环境变量&#x1…

redis主从复制模式和哨兵机制

目录 第一章、主从复制模式1.1&#xff09;Redis 主从复制模式介绍1.2&#xff09;Redis 主从复制实现、 第二章、哨兵机制2.1&#xff09;容灾处理之哨兵2.2&#xff09;Sentinel 配置 第一章、主从复制模式 1.1&#xff09;Redis 主从复制模式介绍 ①单点故障&#xff1a;数…

ASP.NET Core 使用IIS调试出现505.24错误

最近一直再学习asp.net 相关的东西&#xff0c;主要是为前端app提供一个webapi接口。在使用iis调试程序时出现HTTP Error 500.24 - Internal Server Error错误&#xff0c;搞了好久才最终解决。 1.在项目中增加web.config配置文件 2.将配置文件改为如下内容 <?xml version…