介绍
小编给大家分享一下python如何实现单向链表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
什么是链表
链表顾名思义就是~链
链表是一种动态数据结构,他的特点是用一组任意的存储单元存放数据元素。链表中每一个元素成为“结”点,每一个结点都是由数据域和指针域组成的。跟数组不同链表不用预先定义大小,而且硬件支持的话可以无限扩展。
链表与数组的不同点:
数组需要预先定义大小,无法适应数据动态地增减,数据小于定义的长度会浪费内存,数据超过预定义的长度无法插入。而链表是动态增删数据,可以随意增加。
数组适用于获取元素的操作,直接得到索引即可,链表对于获取元素比较麻烦需要从头一直寻找,但是适用与增删,直接修改节点的指向即可,但是对于数组就比较麻烦了,例如(1、2、3、4)需要在下标为1的位置插入2,则需要将(2、3、4)后移,赋值ls [1]=2
数组从栈中分配空间,对于程序员方便快速,但自由度小。链表从堆中分配空间,自由度大但申请管理比较麻烦。
链表基本方法实现(python)
1。初始化链表
“““节点类“““ class 节点(对象): def 才能__init__(自我,,数据): ,,,self.data =数据 ,,,self.nex =,没有 def __init__(自我): “““才能初始化链表“““ self.head 才能=,
2。获取链表长度
def __len__(自我): pre 才能=self.head length 才能=0 while 才能;前: ,,,length +=1 ,,,pre =pre.nex return 才能;长度
3。追加节点
追加节点还是比较简单的,如果头节点不存在,则当前节点为头节点,否则的话找到尾节点,将尾节点的下一指向当前节点(可以添加头和尾两个节点,就不用递归寻找尾节点了)
“““追加节点“““ def 附加(自我,,数据): “才能”;“ 1. head 才能为none :头,在节点 2. tail.nex——才能在节点 ,,:param 数据: ,,:返回: “才能”;“ 时间=node 才能;节点(数据) if 才能;self.head  is 没有: ,,,self.head =,节点 其他的才能: ,,,pre =self.head ,,,while pre.nex: ,,,,,pre =pre.nex ,,,pre.nex 节点=,
4。获取节点
获取节点也是比较容易的,无非就是判断索引值的正负
def 得到自我,,指数: “才能”;“ ,,:param 指数: ,,:返回: “才能”;“ index 才能=,index if index 祝辞=,0,else len(自我),+,指数 if 才能len(自我),& lt;, index 或是index & lt;, 0: ,,,return 没有 pre 才能=self.head while 才能;指数: ,,,pre =pre.nex ,,,index -=1 return 才能;前
5。设置节点
找到当前节点赋值即可
“““设置节点“““ def 集(自我,,指数,数据): 时间=node 才能;self.get(索引) if 才能;节点: ,,,node.data =数据 return 节点才能
6。插入节点
插入节点需要找到插入节点的前一个节点pre_node(索引指数的正,负前一节点不同,需要判断一下),然后将pre_node.nex指向当前节点。同时将当前节点的nex指向pre_node.nex。nex
“““插入节点“““ def 插入(自我,,指数,数据): “才能”;“ 1. index 才能插入节点位置包括正负数 2 .找才能到索引1——祝辞pre_node的节点 3. pre_node.next——才能在节点 ,,node.next——祝辞pre_node.next.next ,4.头 ,,:param 指数: ,,:param 数据: ,,:返回: “才能”;“ 时间=node 才能;节点(数据) if 才能;abs(时间+ index 1),祝辞,len(自我): ,,,return 错误的 index 才能=,index if index 祝辞=,0,else len(自我),+,index + 1 if 才能;index ==, 0: ,,,node.nex =self.head ,,,self.head =,节点 其他的才能: ,,,pre =, self.get (index 安康;1) ,,,if 前: ,,,,,nex =pre.nex ,,,,,pre.nex =,节点 ,,,,,node.nex =nex ,,,: ,,,,,return 错误的 return 节点才能python如何实现单向链表