代码:
# 封装普通节点的类
class Node:
def __init__(self,data):
self.data = data #普通节点的数据域
self.next = None #普通节点的链接域 刚构造的节点该位置域为空
# 封装头节点的类
class LinkList:
def __init__(self,node = None):
self.size = 0 #头结点的数据域为0 链表的长度为0
self.head = node #头结点的链接域指向None
# 判空
def is_empty(self):
return self.size == 0
# return self.head
# 头插
def add_head(self,value):
# 创建一个新的节点
node = Node(value)
# 头插
node.next = self.head
self.head = node
# 插入成功 链表长度自增
self.size += 1
# 尾插
def add_tail(self,value):
node = Node(value)
if self.is_empty():
self.head = node
self.size +=1
else:
q = self.head
while q.next:
q = q.next
q.next = node
self.size += 1
# 任意位置插入
def add_index(self, index, value):
node = Node(value)
if index - 1 > self.size or index < 1:
print("插入失败")
return
else:
q = self.head
if index == 1:
self.add_head(value)
return
while index - 2:
q = q.next
index -= 1
node.next = q.next
q.next = node
self.size += 1
# 头删
def del_head(self):
if self.is_empty():
return "链表为空"
self.head = self.head.next
self.size -= 1
# 尾删
def del_tail(self):
if self.is_empty():
return
else:
if self.size == 1:
self.del_head()
return
q = self.head
while q.next.next:
q = q.next
q.next = None
self.size -= 1
# 按任意位置删除
def del_index(self,index):
if self.is_empty():
return
if index - 1 >= self.size or index < 1:
print("删除失败")
return
else:
if self.size == 1 or index ==1:
self.del_head()
return
q = self.head
while index - 2:
q = q.next
index -= 1
q.next = q.next.next
self.size -= 1
# 反转
def reversal(self):
if self.is_empty():
return
else:
p = None
q = self.head
while q:
next_node = q.next # 暂存下一个节点
q.next = p # 当前节点指向前一个节点
p = q # 更新 prev 为当前节点
q = next_node # 移动到下一个节点
self.head = p # 返回新的头节点
# 按位置修改
def replace_index(self,index,value):
node = Node(value)
if index - 1 >= self.size or index < 1:
print("修改失败")
return
else:
q = self.head
if index == 1:
node.next = self.head.next
self.head = node
return
while index - 2:
q = q.next
index -= 1
node.next = q.next.next
q.next = node
# 按值修改
def replace_value(self,old_value,new_value):
if self.is_empty():
return
else:
q = self.head
while q:
if q.data == old_value:
q.data = new_value
break
q = q.next
else:
print("未找到")
# 按值查找返回的位置
def find_value(self,value):
if self.is_empty():
return
else:
q = self.head
for i in range(1,self.size+1):
if q.data == value:
print(i)
break
q = q.next
else:
print("未找到")
# 遍历
def show(self):
if self.is_empty():
print("链表为空")
else:
q = self.head
while q:
print(q.data,end=' ')
q = q.next #改变q的指向
print()
if __name__ == '__main__':
linkList = LinkList()
# 头插
linkList.add_head(10)
linkList.add_head(20)
linkList.add_head(30)
linkList.add_head(40)
linkList.add_head(50)
# 尾插
linkList.add_tail(60)
linkList.show()
# 任意位置插入
linkList.add_index(1,99)
linkList.show()
# 头删
linkList.del_head()
linkList.del_head()
linkList.show()
# 尾删
linkList.del_tail()
linkList.show()
# 任意位置删除
linkList.del_index(1)
linkList.show()
# 反转
linkList.reversal()
linkList.show()
# #按位置修改
# linkList.replace_index(1,40)
# linkList.show()
# #按值修改
# linkList.replace_value(30,20)
# linkList.show()
# # 按值查找返回的位置
# linkList.find_value(40)
结果:
