1. class Node(object):
    2. """单个节点 """
    3. def __init__(self, elem):
    4. # 该节点存放的数据
    5. self.elem = elem
    6. # 指向下个节点的标识
    7. self.next = None
    8. class SingleLinkList(object):
    9. """单循环链表"""
    10. def __init__(self, node=None):
    11. self.__head = node
    12. if node is not None:
    13. node.next = node
    14. def is_empty(self):
    15. """判断是否为空"""
    16. return self.__head is None
    17. def length(self):
    18. """求长度"""
    19. # cur游标,用来移动遍历节点
    20. cur = self.__head
    21. # count记录数量
    22. count = 1
    23. if self.is_empty():
    24. return 0
    25. else:
    26. while cur.next != self.__head:
    27. count += 1
    28. cur = cur.next
    29. return count
    30. def travel(self):
    31. """遍历"""
    32. cur = self.__head
    33. if self.is_empty():
    34. return
    35. else:
    36. while cur.next != self.__head:
    37. print(cur.elem, end=" ")
    38. cur = cur.next
    39. print(cur.elem)
    40. print("")
    41. def add(self, item):
    42. """头部添加元素,头插法"""
    43. node = Node(item)
    44. cur = self.__head
    45. if self.is_empty():
    46. self.__head = node
    47. node.next = self.__head
    48. else:
    49. while cur.next != self.__head:
    50. cur = cur.next
    51. cur.next = node
    52. node.next = self.__head
    53. self.__head = node
    54. def append(self, item):
    55. """尾部添加元素,尾插发"""
    56. node = Node(item)
    57. cur = self.__head
    58. if self.is_empty():
    59. self.__head = node
    60. node.next = self.__head
    61. else:
    62. while cur.next != self.__head:
    63. cur = cur.next
    64. cur.next = node
    65. node.next = self.__head
    66. def insert(self, pos, item):
    67. """指定位置添加元素
    68. :param item:节点数据
    69. :param pos:插入位置,从0开始
    70. """
    71. if pos <= 0:
    72. self.add(item)
    73. elif pos > (self.length() - 1):
    74. self.append(item)
    75. else:
    76. node = Node(item)
    77. pre = self.__head
    78. count = 0
    79. while count < (pos - 1):
    80. pre = pre.next
    81. count += 1
    82. # 当循环退出后,pre指向pos-1位置
    83. node.next = pre.next
    84. pre.next = node
    85. def remove(self, item):
    86. """删除指定元素"""
    87. if self.is_empty():
    88. return False
    89. pre = None
    90. cur = self.__head
    91. while cur.next != self.__head:
    92. if cur.elem == item:
    93. # 此节点是头节点的情况
    94. if cur == self.__head:
    95. rear = self.__head
    96. while rear.next != self.__head:
    97. rear = rear.next
    98. self.__head = cur.next
    99. rear.next = self.__head
    100. else:
    101. # 中间节点
    102. pre.next = cur.next
    103. return True
    104. else:
    105. pre = cur
    106. cur = cur.next
    107. # 退出循环,cur指向尾节点
    108. if cur.elem == item:
    109. if cur == self.__head:
    110. # 只有一个节点
    111. self.__head = None
    112. else:
    113. pre.next = cur.next
    114. return True
    115. else:
    116. return False
    117. def search(self, item):
    118. """查看节点是否存在"""
    119. cur = self.__head
    120. if self.is_empty():
    121. return False
    122. while cur.next != self.__head:
    123. if cur.elem == item:
    124. return True
    125. else:
    126. cur = cur.next
    127. if cur.elem == item:
    128. return True
    129. else:
    130. return False