赞
踩
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)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。