###节点类
###三个属性,节点值,前向指针,后向指针
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
#调用及结果