当前位置:   article > 正文

python 实现链表的代码_链表的python源代码

链表的python源代码

http://【菜鸟利用python实现了链表的创建以及增加链表的节点,你要不要来看看?】 https://www.bilibili.com/video/BV1qM411v7Ci/?share_source=copy_web&vd_source=b11ebfafd5976cd30713421804a55f6c 这是自己实现的链表代码,注释比较清楚,如果还是不懂的可以去观看我录制的视频,有疑问欢迎下方留言。

  1. class Node:
  2. def __init__(self,val):
  3. self.val = val
  4. self.next = None
  5. class Link_Node:
  6. def __init__(self):
  7. self.head = Node(None) # 表示头结点为空 在本代码中的头结点直接作为指针 不包含任何数据
  8. # 在链表的前面加上节点
  9. def add_Node_head(self,data):
  10. data_Node = Node(data) # 将读进的数据变成节点
  11. # 将节点放在最前面
  12. # 如果本身就是空链表,那么直接返回输入的节点
  13. # if self.head == None:
  14. # self.head.next = data_Node
  15. # return self.head
  16. # 如果不是空链表
  17. # 第一种情况是在链表的前面加
  18. data_Node.next = self.head.next
  19. self.head.next = data_Node
  20. return self.head
  21. def add_Node_tail(self,data):
  22. data_Node = Node(data)
  23. # 在链表的尾部加上节点
  24. temp = self.head
  25. while temp.next:
  26. temp = temp.next
  27. temp.next = data_Node
  28. def add_Node_middle(self,data,location):
  29. data_Node = Node(data)
  30. # 如果增加的位置已经超过本身链表的长度,我们就直接调用尾插的方法
  31. # 我们将头结点当做第0个位置
  32. number = 0
  33. temp = self.head
  34. while temp.next:
  35. number = number + 1
  36. temp = temp.next
  37. temp = self.head # 此时要把临时指针指到链表的头结点,这是下面的代码需要
  38. if number <= location - 1: # 表示链表的长度小于节点本身
  39. while temp.next:
  40. temp = temp.next
  41. temp.next = data_Node
  42. else:
  43. for _ in range(location):
  44. temp = temp.next
  45. data_Node.next = temp.next
  46. temp.next = data_Node
  47. def delate_end(self,head):
  48. if head.next == None:
  49. head = None # 将head变成空
  50. print("没有节点 不能删除")
  51. # 删除的是最后一个节点
  52. # 必须需要两个节点才能进行删除最后一个节点
  53. pre_Node = head
  54. temp = pre_Node.next
  55. while temp.next:
  56. pre_Node = pre_Node.next
  57. temp = pre_Node.next
  58. pre_Node.next = None
  59. def delate_middle(self, head,location):
  60. # 删除中间的指定元素
  61. number = 0
  62. pre_Node = head
  63. temp = pre_Node.next
  64. while pre_Node.next:
  65. number = number + 1
  66. pre_Node = pre_Node.next
  67. pre_Node = head # 此时要把临时指针指到链表的头结点,这是下面的代码需要
  68. if number <= location - 1: # 表示链表的长度小于节点本身
  69. while temp.next:
  70. pre_Node = pre_Node.next
  71. temp = pre_Node.next
  72. pre_Node.next = None
  73. else:
  74. # 删除的是中间的链表节点
  75. for _ in range(location):
  76. pre_Node = pre_Node.next
  77. temp = pre_Node.next
  78. pre_Node.next = temp.next
  79. def print(self,head):
  80. # 用于打印每个节点的值
  81. temp = head
  82. while temp.next:
  83. print(temp.next.val,end="-->")
  84. temp = temp.next
  85. link_node = Link_Node()
  86. link_node.add_Node_head(1)
  87. link_node.add_Node_head(2)
  88. link_node.add_Node_head(3)
  89. link_node.add_Node_head(4)
  90. link_node.add_Node_head(6)
  91. link_node.add_Node_head(5)
  92. print("-----------------------------------在链表的前面增加节点打印输出------------------------------",end="\n")
  93. link_node.print(link_node.head)
  94. link_node.add_Node_tail(30)
  95. link_node.add_Node_tail(0)
  96. print("\n")
  97. print("-----------------------------------在链表的后面增加节点打印输出------------------------------")
  98. link_node.print(link_node.head)
  99. link_node.add_Node_middle(66,100)
  100. print("\n")
  101. print("-----------------------------------在链表的中间增加节点,但是位置超过链表的长度------------------------------")
  102. link_node.print(link_node.head)
  103. print("\n")
  104. print("-----------------------------------在链表的后面增加节点打印输出,位置在链表的里面------------------------------")
  105. link_node.add_Node_middle(77,4)
  106. link_node.print(link_node.head)
  107. print("\n")
  108. print("-----------------------------------删除链表中的最后一个元素------------------------------")
  109. link_node.delate_end(link_node.head)
  110. link_node.print(link_node.head)
  111. print("\n")
  112. print("-----------------------------------删除链表中的中间的一个元素,但是超过了表的最大长度------------------------------")
  113. link_node.delate_middle(link_node.head,100)
  114. link_node.print(link_node.head)
  115. print("\n")
  116. print("-----------------------------------删除链表中的中间的一个元素,但是未超过了表的最大长度------------------------------")
  117. link_node.delate_middle(link_node.head,3)
  118. link_node.print(link_node.head)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/608474
推荐阅读
相关标签
  

闽ICP备14008679号