Python单向链表和双向链表原理与用法实例详解

  

本文实例讲述了Python单向链表和双向链表原理与用法。分享给大家供大家参考,具体如下:

  

链表是一种数据结构,链表在循环遍历的时候效率不高,但是在插入和删除时优势比较大。

  

链表由一个个节点组成。

  

单向链表的节点分为两个部分:存储的对象和对下一个节点的引用。注意是指向下一个节点。

  

而双向链表区别于单向链表的是它是由三个部分组成:存储的对象,对下一个节点的引用,对上一个节点的引用,可以实现双向遍历。

  

<强>单向列表的结构如下图:

  

 Python单向链表和双向链表原理与用法实例详解

  

头是头节点,尾巴是尾节点,每个节点由数据存储对象和未来对下一个节点引用组成

  

下面说一下单向链表插入和删除的过程。

  

<>强插入一个新节点:

  

 Python单向链表和双向链表原理与用法实例详解

  

原理:前一个节点的下一指向当前新节点,新节点的下一指向要插入节点位置的后一个节点。

  

注意:在实际应用时需要考虑插入位置是头结点和尾节点的情况。

  

<>强删除一个节点:

  

 Python单向链表和双向链表原理与用法实例详解

  

原理:找到要删除节点的上一个节点,直接上一个节点的下一指向删除位置的下一个节点。

  

注意:在实际应用中需要考虑到删除的节点是否是头节点或尾节点,需要考虑到链表的长度。

  

        类节点:   下一个=没有   data=https://www.yisu.com/zixun/None   def __init__(自我,nodeData):   自我。data=nodeData   类列表:   头=没有   大?0   def __init__(自我):   自我。大?0   自我。头=没有   #遍历链表   def(自我):   print (“avx”)   def printlist(自我):   p=self.head   虽然(p不是没有):   打印(p.data)   p=p.next   打印(“- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -”)   newdata def insertlink(自我):   newnode=节点(newdata)   如果自我。大?=0:   打印(“链接”)   自我。头=newnode   自我。大?self.size + 1   其他:   p=self.head   虽然(p不是没有)和(p。数据!=):   p=p.next   如果p。下一个是没有:   p。下一个=newnode   自我。大?自我。大小+ 1   其他:   newnode。下一个=p.next   p。下一个=newnode   自我。大?自我。大小+ 1   #删除链表中的节点   def deldata(自我):   如果自我。大?=0:   打印(“链接”)   elif自我。大?=1:   自我。头=没有   自我。大?自我。尺寸1   其他:   p=self.head   虽然(p不是没有)和(p。数据!=):   q=p   p=p.next   如果p是没有:   print(找不到)   elif p==self.head:   自我。头=p.next   elif p。data=https://www.yisu.com/zixun/=a和p。下不是没有:   q。下一个=q.next.next   自我。大?自我。大小- 1   其他:   q。下一个=没有   自我。大?自我。大小- 1   #修改链表中的指定节点   def updatelink(自我,a, b):   p=self.head   打印(p.data)   虽然(p不是没有)和(p.data !=):   p=p.next   如果p是没有:   print(找不到)   其他:   p。data=https://www.yisu.com/zixun/b   if __name__==癬_main__”:   p=列表()   p.insertlink (1, 1)   p.insertlink (1、2)   p.insertlink (1、3)   p.insertlink (1、4)   打印(“_________________________——-insertlink”)   p.printlist ()   打印(“_________________________——chalink”)   p.updatelink (2、5)   p.printlist ()   print (“___________________________——-dellink”)   p.deldata (5)   p.printlist ()      之前      

运行结果:

  
  没有链接


  _________________________——-insertlink
  1
  4
  3
  2
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  _________________________——chalink
  1
  1
  4
  3
  5
  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

Python单向链表和双向链表原理与用法实例详解