python链表的创建 搜索和删除_python 实现链表的增删改查(双向链表)

###节点类

###三个属性,节点值,前向指针,后向指针

classNode():def __init__(self,value,next,prev):

self.value=value

self.next=next

self.prev=prev

###操作链表类classLink():def __init__(self,value):

self.link_create(value)

#链表元素个数deflink_count(self):print("link's len is %d"%self.count)

#创建链表deflink_create(self,value):

self.head=Node(value,None,None)

self.tail=self.head

self.count= 1

#在链表指定位置添加元素

deflink_push_index(self,index,value):

temp_next=Node(value,None,None)if index <=1: #index < 1时,头加

temp_next.next=self.head

self.head=temp_nextelif index >=self.count: #index >链表长度时,尾加

self.tail.next=temp_next

temp_next.prev=self.tail

self.tail=temp_nextelse:        #链表指定位置加

num= 1temp_node=self.headwhile num !=index:

num= num + 1temp_node=temp_node.next

temp_node_prev = temp_node.prevtemp_node.prev = temp_nexttemp_next.next = temp_nodetemp_next.prev = temp_node_prevtemp_node_prev.next = temp_nextself.count+= 1

#添加元素-默认尾加

deflink_push(self,value):

temp_next=Node(value,None,None)

temp_prev=self.tail

self.tail.next=temp_next

self.tail=temp_next

self.tail.prev=temp_prev

self.count+= 1

#删除指定位置元素

deflink_pop_index(self,index):if index <= self.count and index >0:if index == 1:

temp_node=self.head

self.head=temp_node.nextelse:

temp_num=1

temp_node=self.headwhile temp_num !=index :

temp_node=temp_node.next

temp_num= temp_num + 1temp_node.prev.next=temp_node.next

temp_node.next.prev=temp_node.prev

self.count-= 1

else:print("Error:the link only have %d node"%self.count)

#删除第一个找到的目标元素deflink_pop_value_one(self,value):if self.count >0:if value ==self.head.value:

temp_node=self.head

self.head=temp_node.next

self.count-= 1

else:

temp_node=self.headwhile temp_node != None and temp_node.value !=value:

temp_node=temp_node.nextif temp_node ==None:print("the link not have %s"%value)else:

temp_node.prev.next=temp_node.next

temp_node.next.prev=temp_node.prev

self.count-= 1

else:print("the link is empty!")

#删除链表中全部目标元素deflink_pop_value_all(self,value):if self.count >0:

temp_node=self.headwhile temp_node !=None:if self.head.value ==value:

temp_node=self.head

self.head=temp_node.next

temp_node=self.head

self.count-= 1

else:if temp_node.value ==value:

if temp_node.next != None:temp_node.prev.next=temp_node.next

temp_node.next.prev=temp_node.prev

else:

self.tail = temp_node.prev

self.tail.next = None

self.count-= 1temp_node=temp_node.nextelse:print("the link is empty!")

#修改指定位置元素的值deflink_alter_index(self,num,value):

temp_node=self.head

temp_num= 1

if num > 0 and num <=self.count:while temp_num !=num:

temp_num+= 1temp_node=temp_node.next

temp_node.value=valueelse:print("Error:the link only have %d node"%self.count)

#修改第一个找到的目标元素的值deflink_alter_value_one(self,value_old,value_new):

temp_node=self.headwhile temp_node != None and temp_node.value !=value_old:

temp_node=temp_node.nextif temp_node ==None:print("the link not have %s"%value_old)else:

temp_node.value=value_new

#修改链表中全部目标元素的值deflink_alter_value_all(self,value_old,value_new):

temp_node=self.headwhile temp_node !=None:if temp_node.value ==value_old:

temp_node.value=value_new

temp_node=temp_node.next

#打印链表(正序)deflink_print(self):

temp_node=self.headwhile temp_node !=None:printtemp_node.value

temp_node=temp_node.next

#调用及结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值