python双向链表原理与实现方法详解
本文实例讲述了python双向链表原理与实现方法。分享给大家供大家参考,具体如下:
双向链表
一种更复杂的链表是“双向链表”或“双面链表”。每个节点有两个链接:一个指向前一个节点,当此节点为第一个节点时,指向空值;而另一个指向下一个节点,当此节点为最后一个节点时,指向空值。
操作
- is_empty()链表是否为空
- length()链表长度
- travel()遍历链表
- add(item)链表头部添加
- append(item)链表尾部添加
- insert(pos,item)指定位置添加
- remove(item)删除节点
- search(item)查找节点是否存在
实现
classNode(object): """双向链表节点""" def__init__(self,item): self.item=item self.next=None self.prev=None classDLinkList(object): """双向链表""" def__init__(self): self.__head=None defis_empty(self): """判断链表是否为空""" returnself.__head==None deflength(self): """返回链表的长度""" cur=self.__head count=0 whilecur!=None: count+=1 cur=cur.next returncount deftravel(self): """遍历链表""" cur=self.__head whilecur!=None: printcur.item, cur=cur.next print"" defadd(self,item): """头部插入元素""" node=Node(item) ifself.is_empty(): #如果是空链表,将_head指向node self.__head=node else: #将node的next指向_head的头节点 node.next=self.__head #将_head的头节点的prev指向node self.__head.prev=node #将_head指向node self.__head=node defappend(self,item): """尾部插入元素""" node=Node(item) ifself.is_empty(): #如果是空链表,将_head指向node self.__head=node else: #移动到链表尾部 cur=self.__head whilecur.next!=None: cur=cur.next #将尾节点cur的next指向node cur.next=node #将node的prev指向cur node.prev=cur defsearch(self,item): """查找元素是否存在""" cur=self.__head whilecur!=None: ifcur.item==item: returnTrue cur=cur.next returnFalse
指定位置插入节点
definsert(self,pos,item): """在指定位置添加节点""" ifpos<=0: self.add(item) elifpos>(self.length()-1): self.append(item) else: node=Node(item) cur=self.__head count=0 #移动到指定位置的前一个位置 whilecount<(pos-1): count+=1 cur=cur.next #将node的prev指向cur node.prev=cur #将node的next指向cur的下一个节点 node.next=cur.next #将cur的下一个节点的prev指向node cur.next.prev=node #将cur的next指向node cur.next=node
删除元素
defremove(self,item): """删除元素""" cur=self.__head whilecur!=None: #找到了要删除的元素 ifcur.item==item: #先判断此结点是否是头节点 #头节点 ifcur==self.__head: self.__head=cur.next #如果存在下一个结点,则设置下一个结点 ifcur.next: #判断链表是否只有一个结点 cur.next.prev=None else: cur.prev.next=cur.next #如果存在下一个结点,则设置下一个结点 ifcur.next: cur.next.prev=cur.prev break else: cur=cur.next
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python加密解密算法与技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。