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. def is_empty(self):
    13. """判断是否为空"""
    14. return self.__head is None
    15. def length(self):
    16. """求长度"""
    17. # cur游标,用来移动遍历节点
    18. cur = self.__head
    19. # count记录数量
    20. count = 0
    21. while cur is not None:
    22. count += 1
    23. cur = cur.next
    24. return count
    25. def travel(self):
    26. """遍历"""
    27. cur = self.__head
    28. while cur is not None:
    29. print(cur.elem, end=" ")
    30. cur = cur.next
    31. def add(self, item):
    32. """头部添加元素,头插法"""
    33. node = Node(item)
    34. node.next = self.__head
    35. self.__head = node
    36. def append(self, item):
    37. """尾部添加元素,尾插发"""
    38. node = Node(item)
    39. if self.is_empty():
    40. self.__head = node
    41. else:
    42. cur = self.__head
    43. while cur.next is not None:
    44. cur = cur.next
    45. cur.next = node
    46. def insert(self, pos, item):
    47. """指定位置添加元素
    48. :param item:节点数据
    49. :param pos:插入位置,从0开始
    50. """
    51. if pos <= 0:
    52. self.add(item)
    53. elif pos > (self.length() - 1):
    54. self.append(item)
    55. else:
    56. node = Node(item)
    57. pre = self.__head
    58. count = 0
    59. while count < (pos - 1):
    60. pre = pre.next
    61. count += 1
    62. # 当循环退出后,pre指向pos-1位置
    63. node.next = pre.next
    64. pre.next = node
    65. def remove(self, item):
    66. """删除指定元素"""
    67. pre = None
    68. cur = self.__head
    69. while cur is not None:
    70. if cur.elem == item:
    71. # 先判断此节点是否是头节点
    72. if cur == self.__head:
    73. self.__head == cur.next
    74. else:
    75. pre.next = cur.next
    76. return True
    77. else:
    78. pre = cur
    79. cur = cur.next
    80. return False
    81. def search(self, item):
    82. """查看节点是否存在"""
    83. cur = self.__head
    84. while cur is not None:
    85. if cur.elem == item:
    86. return True
    87. else:
    88. cur = cur.next
    89. return False