python实现双链表的代码如何写,要注意什么
Admin 2022-08-19 群英技术资讯 271 次浏览
本文实例为大家分享了Python代码实现双链表的具体代码,供大家参考,具体内容如下
双链表的每个节点有两个指针: 一个指向后一个节点,另一个指向前一个节点
class Node(object): def __init__(self, item=None): #放数据 self.item= item #指向后一个节点 self.next = None #指向前一个节点 self.prior =None
此时当前链表第一个节点就是头节点指向的节点 20就是第一个节点 下图
node.next = self.head 当前节点指向原第一个节点
头插法
如何插入呢
插入
p.next = curNode.next #指向后一个节点
curNode.next.prior = p #指向前一个节点
删除
双链表删除
考虑特殊情况删除的
正常删除
双链表删除 30
#双链表头插法
#停在前一个位置了
count < (pos -1 )
#双向链表 从左往右读 class Node(object): """双向链表节点""" def __init__(self,item): #放数据的节点 self.elem = item #指向后一个节点 self.next = None #指向前一个节点 self.prev = None #双向链表 class LinkList(object): def __init__(self,node=None): #代表头节点 self.__head = node #判断链表是否为空 def is_empty(self): return self.__head == None def length(self): """返回链表的长度""" #cur游标移动,从而实现遍历元素的功能 cur = self.__head #count用来计数 count = 0 while cur != None: count += 1 #让cur游标可以向下移动 cur = cur.next return count #遍历整个链表 def travel(self): if self.is_empty(): return #建立游标等于起始节点 else: cur = self.__head while cur != None: print(cur.elem,end=" ") cur = cur.next print("") #头插法 def add(self,item): #新节点 node = Node(item) if self.is_empty(): #头节点指向了新的节点 self.__head = node else: #新节点指向原第一个节点 node.next = self.__head self.__head = node node.next.prev = node def append(self,item): """链表尾部添加元素""" node = Node(item) #定义新节点 #链表是否为空链表 if self.is_empty(): #如果为空,新的节点加了进去 self.__head = node else: #头节点 创建游标 cur = self.__head #设置指向头结点的游标 此时的当前链表第一个节点,就是头节点指向的节点 #cur到最后一个节点停下 while cur.next != None: cur = cur.next #添加节点到尾部 cur道了最后一个结点 cur.next指向了新的节点node 从左往右读 cur.next = node #当前的节点指向它前一个 node.prev = cur #插入法 #pos从零开始 def insert(self,pos,item): """在指定位置添加元素""" #指向不是头部元素,self.__head的地址 # 为下一个元素,所以pre为下一个元素 if pos <= 0: #认为是头插法 self.add(item) #假如长度是3 pos大于2要特殊处理 elif pos > (self.length()-1): #尾插法 self.append(item) else: #创建节点 新节点 node = Node(item) cur = self.__head count = 0 #动起来 while count < pos: count+=1 cur = cur.next #把节点链接到中间任意位置 插入前一个节点 此时,cur停在后一个节点 node.next = cur node.prev = cur.prev cur.prev.next = node cur.prev = node def remove(self,item): """删除元素""" if self.is_empty(): return cur = self.__head #查找所有的位置有没有要删除的,若有则删除 while cur != None: #判断cur指向的数据,是否为要删除的数据 item要删除的元素 if cur.elem == item: #判断此节点是否为头节点 #考虑特殊情况,恰好要删除是第一个元素 当前的元素就是我要删除的元素 if cur == self.__head: #如果删除中间, 头节点指向后一个节点 self.__head = cur.next #考虑链表只有一个节点 直接指向None if cur.next != None: #是否只有一个节点 cur.next.prev = None else: #中间节点 cur.prev.next = cur.next if cur.next != None: cur.next.prev = cur.prev break else: #没有找到,cur游标向继续往下移动 cur = cur.next def search(self,item): """查找结点是否存在""" #如果是一个空链表 if self.is_empty(): return False cur = self.__head while cur.next != self.__head: #cur数据是否为查找的数据 item是要查的数据 if cur.elem == item: return True else: cur = cur.next #遍历完成 cur指向None return False if __name__ == '__main__': ll = LinkList() #第一次的 print(ll.is_empty()) print(ll.length()) ll.append(1) print(ll.is_empty()) print(ll.length()) ll.append(2) ll.append(3) ll.append(4) ll.append(5) ll.travel() ll.insert(-1,50) ll.travel() ll.insert(2,60) ll.travel() ll.insert(10,300) ll.travel() ll.remove(50) ll.travel() ll.remove(300) ll.travel()
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
本文主要介绍了Python为什么要保留显式的self,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧<BR>
在写代码的时候,往往会漏掉日志这个关键因素,导致功能在使用的时候出错却无法溯源。这个时候只要利用日志装饰器就能解决,本文将用Python自制一个简单实用的日志装饰器,需要的可以参考一下
在python中:按位的运算,都按位的运算,都是把参加运算的数的二进制形式进行运算。1 与运算:A与B值均为1时,A、B与的运算结果才为1,否则
这篇文章给大家分享的是有关django与ajax怎样实现交互的内容,很多新手django与ajax交互可能不是很了解,因此分享给大家做个参考,有这方面学习需要的朋友接下来一起跟随小编看看吧。
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。它不仅能够实现强大的GPU加速,同时还支持动态神经网络。本文将介绍PyTorch搭建CNN如何实现风速预测,感兴趣的可以学习一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008