python如何实现单向链表

  介绍

小编给大家分享一下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。追加节点

追加节点还是比较简单的,如果头节点不存在,则当前节点为头节点,否则的话找到尾节点,将尾节点的下一指向当前节点(可以添加头和尾两个节点,就不用递归寻找尾节点了)

 python如何实现单向链表

“““追加节点“““      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

 python如何实现单向链表

“““插入节点“““      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如何实现单向链表