当前位置:   article > 正文

Python实现单链表的节点类,增删改查操作_python在单链表中插入一个元素x的结点

python在单链表中插入一个元素x的结点

 1、创建单链表节点的类:

     包含两个成员变量:next 指针 和 value值

2、定义单链表的类

    包含一个成员变量:单链表的头指针,初始化为None

3、定义单链表的操作:

(1)单链表初始化

(2)是否非空

(3)求链表长度

(4)链表元素查询

(5)链表插入元素X:头、尾和指定位置

(6)链表删除元素X

4、查询、插入和删除的时间复杂度

(1)查找 时间复杂度: O(n)

(2)插入和删除,由于要从头查找前驱结点,所耗时间复杂度为O(n),插入和删除本身的操作时间复杂度是O(1)

  1. #定义单链表的节点
  2. class linknode:
  3. def __init__(self,val):
  4. '''实例化单链表的类时:定义两个成员变量:一个是head指针,一个是节点存储的值'''
  5. self.val = val
  6. self.next = None
  7. #定义单链表类:并定义单链表的成员函数:增删改查
  8. class linklist:
  9. def __init__(self):
  10. self.head=None
  11. #初始化单链表
  12. def init_linklist(self,data):
  13. self.head = linknode(data[0]) #创建头节点,头节点的值存放data的第0个元素
  14. r = p = self.head
  15. for i in data[1:]:
  16. node = linknode(i)
  17. p.next = node
  18. p = p.next
  19. return r
  20. #判断单链表是否为空
  21. def is_empty(self):
  22. return self.head==None
  23. #获取单链表的长度
  24. def length(self):
  25. count = 0
  26. cur = self.head #定义游标
  27. while cur != None:
  28. count +=1
  29. cur = cur.next
  30. return count
  31. #遍历整个链表
  32. def travel(self):
  33. cur = self.head #定义游标
  34. while cur != None:
  35. print(cur.val,end=' ')
  36. cur = cur.next
  37. #单链表查询指定元素x所在的位置
  38. def search(self,x):
  39. cur = self.head #定义游标
  40. count = 0
  41. while cur!= None:
  42. if cur.val==x:
  43. return count
  44. else:
  45. cur = cur.next
  46. count += 1
  47. return -1
  48. #单链表表头增加元素x
  49. def insert_to_head(self,x):
  50. node = linknode(x)
  51. node.next = self.head
  52. self.head = node
  53. #单链表末尾增加元素x
  54. def insert_to_end(self,x):
  55. node = linknode(x)
  56. if self.is_empty():
  57. self.head = node
  58. else:
  59. cur = self.head
  60. while cur.next !=None:
  61. cur = cur.next
  62. cur.next = node
  63. #单链表指定位置添加元素x
  64. def insert_to_index(self,x,pos):
  65. if pos<=0:
  66. self.insert_to_head(x)
  67. elif pos> (self.length() -1):
  68. self.insert_to_end(x)
  69. else:
  70. cur = self.head
  71. count = 0
  72. node = linknode(x)
  73. while count<pos-1: #从0开始,循环结束后 cur指向 要插入元素的上一个节点
  74. count += 1
  75. cur = cur.next
  76. node.next = cur.next #先:新的节点的next指向原来该位置的节点,再:当前节点的next指向新的节点
  77. cur.next = node
  78. #删除值为x的节点
  79. def delete(self,x):
  80. cur = self.head
  81. while cur != None:
  82. if cur.val == x:
  83. if cur == self.head:
  84. self.head = cur.next
  85. else:
  86. cur.next = cur.next.next
  87. break
  88. else:
  89. cur = cur.next
  90. if __name__=='__main__':
  91. l = linklist()
  92. #l.init_linklist(['a','b','c','d',1,9,10,8,0])
  93. print(l.is_empty())
  94. l.insert_to_head(10)
  95. l.insert_to_end(0)
  96. l.insert_to_index(9,1)
  97. l.insert_to_index(8,2)
  98. l.insert_to_index(7,3)
  99. l.insert_to_index(6,4)
  100. print(l.length())
  101. print(l.search(9))
  102. l.travel()
  103. l.delete(8)
  104. print('')
  105. l.travel()
  106. True
  107. 6
  108. 1
  109. 10 9 8 7 6 0
  110. 10 9 8 6 0
  111. Process finished with exit code 0

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

闽ICP备14008679号