单向链表的反转 python,反转一个单链表 python
本文主要详细介绍了用python实现双向链表的原理。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
双向链表
更复杂的链表是“双向链表”或“双向链表”。每个节点有两个链接:一个指向前一个节点,当这个节点是第一个节点时,它指向一个空值;而另一个指向下一个节点,当这个节点是最后一个节点时,它指向一个空值。
操作
_empty()链表是空的吗?
Length()链表长度
Travel()遍历链表
添加(项目)链表头
添加到追加(项目)链表的末尾
Insert(pos,item)指定要添加的位置
删除(项目)删除节点。
搜索(项目)以确定该节点是否存在。
实现
类节点(对象):
双向链表节点
def __init__(self,item):
self.item=项目
self.next=无
self.prev=无
类数据链表(对象):
双向链表
def __init__(self):
自我。__head=无
定义为_空(自身):
确定链表是否为空
回归自我。__head==无
定义长度(自身):
返回链表的长度
cur=self。_ _头
计数=0
一边诅咒!=无:
计数=1
下一个
返回计数
定义差旅(自助):
遍历链表
cur=self。_ _头
一边诅咒!=无:
打印当前项目,
下一个
打印
定义添加(自身,项目):
在标头处插入元素
节点=节点(项目)
if self.is_empty():
#如果是空链表,指向_head节点
自我。__head=节点
else:
#将下一个节点指向_head的头节点
node.next=self。_ _头
#将_head的头节点的prev指向该节点
自我。__head.prev=node
#点到节点
自我。__head=节点
定义附加(自身,项目):
在结尾插入元素
节点=节点(项目)
if self.is_empty():
#如果是空链表,指向_head节点
自我。__head=节点
else:
#移动到链接列表的末尾
cur=self。_ _头
下一个!=无:
下一个
#将尾节点cur的下一个指向节点
cur.next=node
#当前节点的前一点
node.prev=cur
定义搜索(自身,项目):
找出该元素是否存在
cur=self。_ _头
一边诅咒!=无:
if cur.item==item:
返回True
下一个
返回False
指定位置插入节点
定义插入(自身、位置、项目):
在指定位置添加节点
如果pos=0:
self.add(项目)
elif pos (self.length()-1):
自我附加(项目)
else:
节点=节点(项目)
cur=self。_ _头
计数=0
#移动到指定位置的前一个位置
同时计数(位置1):
计数=1
下一个
#当前节点的前一点
node.prev=cur
#将下一个of节点指向下一个cur节点
node.next=cur.next
#将cur的下一个节点的prev指向该节点
cur.next.prev=node
#节点旁的点曲线
cur.next=node
删除元素
定义移除(自身,项目):
删除元素
cur=self。_ _头
一边诅咒!=无:
#找到要删除的元素。
if cur.item==item:
#首先确定这个节点是否是头节点。
#头节点
if cur==self。__head:
自我。__head=cur.next
#如果下一个节点存在,则设置下一个节点
if cur.next:
#确定链表是否只有一个节点。
cur.next.prev=无
else:
cur.prev.next=cur.next
#如果下一个节点存在,则设置下一个节点
if cur.next:
cur.next.prev=cur.prev
破裂
else:
下一个
测试
if __name__==__main__:
ll=DLinkList()
ll.add(1)
ll.add(2)
ll.append(3)
ll.insert(2,4)
ll.insert(4,5)
ll.insert(0,6)
打印“长度:”,ll.length()
ll.travel()
打印ll.search(3)
打印ll.search(4)
ll.remove(1)
打印“长度:”,ll.length()
ll.travel()
这就是本文的全部内容。希望对大家的学习有所帮助,也希望大家能支持盛行的IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。