python实现单链表,单链表python基本操作
本文主要详细介绍Python代码实现双向链表。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享Python代码实现双向链表的具体代码,供大家参考。具体内容如下
双向链表的每个节点都有两个指针:一个指向下一个节点,另一个指向前一个节点。
类节点(对象):
def __init__(self,item=None):
#上传数据
self.item=项目
#指向下一个节点
self.next=无
#指向上一个节点
self.prior=无
此时,当前链表的第一个节点是头节点指向的节点,节点20是第一个节点,如下图所示。
Node.next=self.head当前节点指向原来的第一个节点。
头部插入法
怎么插?
插入
P.next=curNode.next #指向下一个节点。
CurNode.next.prior=p #指向上一个节点。
删除
双向链表删除
考虑到特殊情况,已删除
正常缺失
双向链表删除30
#双向链表头插入方法
#停在先前的位置
计数(位置1)
#双向链表从左到右读取
类节点(对象):
双向链表节点
def __init__(self,item):
#放置数据的节点
self.elem=item
#指向下一个节点
self.next=无
#指向上一个节点
self.prev=无
#双向链表
类链表(对象):
def __init__(self,node=None):
#代表头节点
自我。__head=节点
#确定链表是否为空。
定义为_空(自身):
回归自我。__head==无
定义长度(自身):
返回链表的长度
#cur光标移动,从而实现遍历元素的功能。
cur=self。_ _头
#count用于计数
计数=0
一边诅咒!=无:
计数=1
#让光标向下移动。
下一个
返回计数
#遍历整个链表
定义差旅(自助):
if self.is_empty():
返回
#创建等于开始节点的光标
else:
cur=self。_ _头
一边诅咒!=无:
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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。