http://【菜鸟利用python实现了链表的创建以及增加链表的节点,你要不要来看看?】 https://www.bilibili.com/video/BV1qM411v7Ci/?share_source=copy_web&vd_source=b11ebfafd5976cd30713421804a55f6c 这是自己实现的链表代码,注释比较清楚,如果还是不懂的可以去观看我录制的视频,有疑问欢迎下方留言。
class Node:
def __init__(self,val):
self.val = val
self.next = None
class Link_Node:
def __init__(self):
self.head = Node(None) # 表示头结点为空 在本代码中的头结点直接作为指针 不包含任何数据
# 在链表的前面加上节点
def add_Node_head(self,data):
data_Node = Node(data) # 将读进的数据变成节点
# 将节点放在最前面
# 如果本身就是空链表,那么直接返回输入的节点
# if self.head == None:
# self.head.next = data_Node
# return self.head
# 如果不是空链表
# 第一种情况是在链表的前面加
data_Node.next = self.head.next
self.head.next = data_Node
return self.head
def add_Node_tail(self,data):
data_Node = Node(data)
# 在链表的尾部加上节点
temp = self.head
while temp.next:
temp = temp.next
temp.next = data_Node
def add_Node_middle(self,data,location):
data_Node = Node(data)
# 如果增加的位置已经超过本身链表的长度,我们就直接调用尾插的方法
# 我们将头结点当做第0个位置
number = 0
temp = self.head
while temp.next:
number = number + 1
temp = temp.next
temp = self.head # 此时要把临时指针指到链表的头结点,这是下面的代码需要
if number <= location - 1: # 表示链表的长度小于节点本身
while temp.next:
temp = temp.next
temp.next = data_Node
else:
for _ in range(location):
temp = temp.next
data_Node.next = temp.next
temp.next = data_Node
def delate_end(self,head):
if head.next == None:
head = None # 将head变成空
print("没有节点 不能删除")
# 删除的是最后一个节点
# 必须需要两个节点才能进行删除最后一个节点
pre_Node = head
temp = pre_Node.next
while temp.next:
pre_Node = pre_Node.next
temp = pre_Node.next
pre_Node.next = None
def delate_middle(self, head,location):
# 删除中间的指定元素
number = 0
pre_Node = head
temp = pre_Node.next
while pre_Node.next:
number = number + 1
pre_Node = pre_Node.next
pre_Node = head # 此时要把临时指针指到链表的头结点,这是下面的代码需要
if number <= location - 1: # 表示链表的长度小于节点本身
while temp.next:
pre_Node = pre_Node.next
temp = pre_Node.next
pre_Node.next = None
else:
# 删除的是中间的链表节点
for _ in range(location):
pre_Node = pre_Node.next
temp = pre_Node.next
pre_Node.next = temp.next
def print(self,head):
# 用于打印每个节点的值
temp = head
while temp.next:
print(temp.next.val,end="-->")
temp = temp.next
link_node = Link_Node()
link_node.add_Node_head(1)
link_node.add_Node_head(2)
link_node.add_Node_head(3)
link_node.add_Node_head(4)
link_node.add_Node_head(6)
link_node.add_Node_head(5)
print("-----------------------------------在链表的前面增加节点打印输出------------------------------",end="\n")
link_node.print(link_node.head)
link_node.add_Node_tail(30)
link_node.add_Node_tail(0)
print("\n")
print("-----------------------------------在链表的后面增加节点打印输出------------------------------")
link_node.print(link_node.head)
link_node.add_Node_middle(66,100)
print("\n")
print("-----------------------------------在链表的中间增加节点,但是位置超过链表的长度------------------------------")
link_node.print(link_node.head)
print("\n")
print("-----------------------------------在链表的后面增加节点打印输出,位置在链表的里面------------------------------")
link_node.add_Node_middle(77,4)
link_node.print(link_node.head)
print("\n")
print("-----------------------------------删除链表中的最后一个元素------------------------------")
link_node.delate_end(link_node.head)
link_node.print(link_node.head)
print("\n")
print("-----------------------------------删除链表中的中间的一个元素,但是超过了表的最大长度------------------------------")
link_node.delate_middle(link_node.head,100)
link_node.print(link_node.head)
print("\n")
print("-----------------------------------删除链表中的中间的一个元素,但是未超过了表的最大长度------------------------------")
link_node.delate_middle(link_node.head,3)
link_node.print(link_node.head)