1 # -*- coding=utf-8 -*- 2 # software: 算法学习 3 # datetime:2020/4/8 11:13 上午 4 5 class Node(object): 6 7 def __init__(self, data=None, next=None): 8 self._value = data 9 self._next = next 10 11 def get_value(self): 12 return self._value 13 14 def get_next(self): 15 return self._next 16 17 def set_value(self, new_data): 18 self._value = new_data 19 20 def set_next(self, new_next): 21 self._next = new_next 22 23 24 class LinkList(object): 25 26 def __init__(self): 27 self._head = Node() 28 self._tail = self._head 29 self._length = 0 30 31 def head(self): 32 """ 33 链表的第一个元素(除去头节点) 34 :return: 35 """ 36 if self._head.get_next(): 37 return self._head.get_next() 38 else: 39 return Node() 40 41 def tail(self): 42 """ 43 链表的最后一个元素 44 :return: 45 """ 46 return self._tail 47 48 def is_empty(self): 49 """ 50 判断链表是否为空 51 :return: 52 """ 53 return self._length == 0 54 55 def size(self): 56 """ 57 链表的大小 58 :return: 59 """ 60 return self._length 61 62 def add(self, value): 63 """ 64 从头部插入节点 65 :param value: 66 :return: 67 """ 68 new_node = Node(value) 69 new_node.set_next(self._head.get_next()) 70 self._head.set_next(new_node) 71 self._length += 1 72 73 def append(self, value): 74 """ 75 从尾部追加节点 76 :param value: 77 :return: 78 """ 79 new_node = Node(value) 80 if self.is_empty(): 81 self._head.set_next(new_node) 82 else: 83 current = self._head 84 while current.get_next(): 85 current = current.get_next() 86 current.set_next(new_node) 87 self._tail = new_node 88 self._length += 1 89 90 def search(self, value): 91 """ 92 查找数据,返回-1或者节点索引 93 :param value: 94 :return: 95 """ 96 current = self._head.get_next() 97 count = 0 98 while current.get_next(): 99 if current.get_value() == value: 100 return count 101 current = current.get_next() 102 count += 1 103 return -1 104 105 def remove(self, value): 106 """ 107 删除 返回该数据或者-1 108 :param value: 109 :return: 110 """ 111 current = self._head 112 pre = None 113 while current.get_next(): 114 if current.get_value() == value: 115 if not pre: 116 self._head = current.get_next() 117 else: 118 pre.set_next(current.get_next()) 119 self._length -= 1 120 return current.get_value() 121 pre = current 122 current = current.get_next() 123 else: 124 return -1 125 126 127 def insert(self, index, value): 128 """ 129 插入数据节点 130 :param index: 131 :param value: 132 :return: 133 """ 134 if index <= 1: 135 self.add(value) 136 elif index > self.size(): 137 self.append(value) 138 else: 139 new_node = Node(value) 140 count = 0 141 current = self._head 142 pre = None 143 while count < index: 144 count += 1 145 pre = current 146 current = current.get_next() 147 pre.set_next(new_node) 148 new_node.set_next(current) 149 self._length += 1 150 151 152 if __name__ == ‘__main__‘: 153 arr = [1, 4, 2, 6, 8, 4, 9] 154 print("数组的长度: ", len(arr)) 155 link_list = LinkList() 156 print("空链表size: ", link_list.size()) 157 print("空链表是否为空:", link_list.is_empty()) 158 print("空链表的第一个数据:", link_list.head().get_value()) 159 print("空链表的最后一个数据:", link_list.tail().get_value()) 160 for i in arr: 161 link_list.append(i) 162 163 # 添加 164 link_list.append(10) 165 link_list.add(10) 166 link_list.insert(1, 11) 167 link_list.insert(3, 12) 168 link_list.insert(7, 13) 169 print("删除的元素:", link_list.remove(1)) 170 link_list.append(1) 171 link_list.add(10) 172 173 current = link_list.head() 174 l = "" 175 while current.get_next(): 176 l += str(current.get_value()) + " " 177 current = current.get_next() 178 l += str(current.get_value()) 179 print("遍历链表的值", l) 180 print("链表的尺寸:", link_list.size()) 181 print("链表的查找:", link_list.search(8)) 182 print("链表的第一个数据:", link_list.head().get_value()) 183 print("链表的最后一个数据:", link_list.tail().get_value())
原文:https://www.cnblogs.com/dreamall/p/12659770.html