其他都是废话,看代码
1、一个简单的增删改
###节点类
###三个属性,节点值,前向指针,后向指针
class Node():
def __init__(self, value, next, prev):
self.value = value
self.next = next
self.prev = prev
###操作链表类
class Link():
def __init__(self, value):
self.link_create(value)
# 链表元素个数
def link_count(self):
print("link's len is %d" % self.count)
# 创建链表
def link_create(self, value):
self.head = Node(value, None, None)
self.tail = self.head
self.count = 1
# 在链表指定位置添加元素
def link_push_index(self, index, value):
temp_next = Node(value, None, None)
if index <= 1: # index < 1时,头加
temp_next.next = self.head
self.head = temp_next
elif index >= self.count: # index >链表长度时,尾加
self.tail.next = temp_next
temp_next.prev = self.tail
self.tail = temp_next
else:
# 链表指定位置加
pass
num = 1
temp_node = self.head
while num != index:
num = num + 1
temp_node = temp_node.next
temp_node_prev = temp_node.prev
temp_node.prev = temp_next
temp_next.next = temp_node
temp_next.prev = temp_node_prev
temp_node_prev.next = temp_next
self.count += 1
# 添加元素-默认尾加
def link_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
# 删除指定位置元素
def link_pop_index(self, index):
if index <= self.count and index > 0:
if index == 1:
temp_node = self.head
self.head = temp_node.next
else:
temp_num = 1
temp_node = self.head
while temp_num != index:
temp_node = temp_node.next
temp_num = temp_num + 1
temp_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)
# 删除第一个找到的目标元素
def link_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.head
while temp_node != None and temp_node.value != value:
temp_node = temp_node.next
if 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!")
# 删除链表中全部目标元素
def link_pop_value_all(self, value):
if self.count > 0:
temp_node = self.head
while 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 -= 1
temp_node = temp_node.next
else:
print("the link is empty!")
# 修改指定位置元素的值
def link_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 += 1
temp_node = temp_node.next
temp_node.value = value
else:
print("Error:the link only have %d node" % self.count)
# 修改第一个找到的目标元素的值
def link_alter_value_one(self, value_old, value_new):
temp_node = self.head
while temp_node != None and temp_node.value != value_old:
temp_node = temp_node.next
if temp_node == None:
print("the link not have %s" % value_old)
else:
temp_node.value = value_new
# 修改链表中全部目标元素的值
def link_alter_value_all(self, value_old, value_new):
temp_node = self.head
while temp_node != None:
if temp_node.value == value_old:
temp_node.value = value_new
temp_node = temp_node.next
# 打印链表(正序)
def link_print(self):
temp_node = self.head
while temp_node != None:
print
temp_node.value
temp_node = temp_node.next
head = Link("head")
for i in range(5):
head.link_push(i)
head.link_print()
head.link_count()
head.link_pop_index(2) #删除第2个元素
head.link_print()
head.link_count()
head.link_push(5) #添加元素5
head.link_print()
head.link_count()
head.link_push_index(3,1000) #在第三个位置添加 1000
head.link_print()
head.link_count()
head.link_pop_value_one(1000) #删除元素1000
head.link_print()
head.link_count()
# head.link_pop_value_all(5) #删除所有元素5
# head.link_print()
# head.link_count()
# 修改指定位置元素的值
head.link_alter_index(1,1995)
head.link_print()
head.link_count()
head.link_alter_value_one(15,5)
head.link_print()
head.link_count()
head.link_alter_value_all(5,118)
head.link_print()
head.link_count()
2、结果
