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