创建
class Node:
def __init__(self,data):
# 数据域
self.data = data
# 链接域
self.next = None
class LinkList:
def __init__(self,):
# 初始化头节点
self.head = None
# 记录链表的长度
self.size = 0
增加
#头插
def insert_head(self,value):
# 创建新节点
node = Node(value)
q = self.head
# 头插
while q:
q = q.next
node.next = self.head
self.head = node
# 插入成功,链表长度自增
self.size += 1
#尾插
def insert_rear(self,value):
# 创建新结点
node = Node(value)
# 判空,若为空则在头节点插入
if self.is_empty():
self.head = node
else:
# 不为空则遍历到最后一个结点插入新结点
p = self.head
# 遍历到结点链接域为None说明到达最后一个结点
while p.next:
p = p.next
p.next = node
# 添加成功,链表长度自增
self.size += 1
# 遍历链表
def show(self):
# 判空
if self.is_empty():
print("遍历失败")
return
else:
# 创建临时变量
q = self.head
while q:
print(f"{q.data}",end=" ")
q = q.next
print()
#任意位置插入
def insert_any_index(self,value,index):
# 判断位置是否合理
if 1>index or index >self.size+1:
print("插入失败")
else:
# 若为第一个元素,则使用头插法
if index == 1:
self.insert_head(value)
else:
node = Node(value)
p = self.head
i = 1
# 将p指向要插入位置的前一个结点
while i<index-1:
p = p.next
i += 1
# 新结点的链接域指向前结点的下链接域,前结点的链接域指向新结点d
node.next = p.next
p.next = node
self.size += 1
删除
def delete_head(self):
if self.is_empty():
print("删除失败")
return
else:
self.head = self.head.next
self.size -= 1
def delete_rear(self):
if self.is_empty():
print("删除失败")
return
elif self.size == 1:
self.head =None
self.size -= 1
else:
p = self.head
while p.next.next :
p = p.next
p.next = p.next.next
self.size -= 1
def any_index_delete(self,index):
if self.is_empty():
print("删除失败")
return
else:
if index == 1:
self.delete_head()
return
i = 1
p = self.head
while i<index-1:
p = p.next
i+=1
p.next = p.next.next
self.size -= 1
查找与修改
def revise_index(self,index,value):
if self.is_empty() or not 1<=index<=self.size:
print("修改失败")
return
else:
i = 1
p = self.head
while i<index:
p = p.next
i += 1
p.data = value
def find_index(self,value):
if self.is_empty():
print("查找失败")
return
i = 1
q = self.head
while i<self.size:
if q.data == value:
print(f"查找成功,你要的数据在第{i}个结点")
return i
i += 1
q = q.next
else:
print("查找失败")
def revise_value(self,value,n_value):
self.revise_index(self.find_index(value),n_value)
return
转置
def transposition(self):
if self.is_empty():
print("失败")
p = self.head
t = self.head
while p.next:
t = p.next
p.next = t.next
t.next = self.head
self.head = t