
最近一个月,就耗在这上面吧。
很有收获的。
# coding = utf-8 # 单向链表 class Node: def __init__(self, new_data): self.data = new_data self.next = None def get_data(self): return self.data def set_data(self, new_data): self.data = new_data def get_next(self): return self.next def set_next(self, new_next): self.next = new_next class SingleList: def __init__(self): self.head = None # 作头插入时,需要要注意插入顺序, # 先将节点的netxt设为head,然后,再将节点设为Head。 # 总之。要注意不要丢失next。 def add(self, item): temp = Node(item) temp.set_next(self.head) self.head = temp # 作尾插入时,需要先判断是否为空列表。因为空列表时,没有next。 # 为空列表时,尾插入和头插入代码相同。 # 当不为空时,需要循环到底,再作插入处理 def append(self, item): temp = Node(item) if self.is_empty(): temp.set_next(self.head) self.head = temp else: current = self.head while current.get_next() is not None: current = current.get_next() current.set_next(temp) # 指定位置插入节点 def insert(self, pos, item): # 相当于头插入 if pos <= 0: self.add(item) # 相当于尾插入 elif pos >= self.size(): self.append(item) else: temp = Node(item) count = 0 current = self.head # 先将游标指到要插入位置 while count < pos - 1: count += 1 current = current.get_next() # 先将节点插入游标下一节点,再将当前游标指向节点 temp.set_next(current.get_next()) current.set_next(temp) # 删除指定节点数据 def remove(self, item): previous = None current = self.head while current is not None: if current.get_data() == item: # 在找到节点之后,需要判断是否为首节点 # 因为首节点时,还没有Previous这个变量 if current == self.head: self.head = current.get_next() else: previous.set_next(current.get_next()) break else: previous = current current = current.get_next() # 查找指定数据是否存在 def search(self, item): current = self.head found = False while current is not None: if current.get_data() == item: found = True current = current.get_next() return found def is_empty(self): return self.head is None def __len__(self): return self.size() def size(self): count = 0 current = self.head while current is not None: count += 1 current = current.get_next() return count def show(self): current = self.head while current is not None: print(current.get_data(), end=' ') current = current.get_next() print('\n') if __name__ == '__main__': s_list = SingleList() print(s_list.is_empty()) s_list.add(5) s_list.add(4) s_list.add(76) s_list.add(23) s_list.show() s_list.append(47) s_list.show() s_list.insert(0, 100) s_list.show() s_list.insert(99, 345) s_list.show() s_list.insert(3, 222) s_list.show() s_list.remove(47) s_list.show() print(s_list.search(76)) s_list.show() print(s_list.is_empty()) print(s_list.size()) print(len(s_list))
C:\Users\Sahara\.virtualenvs\test\Scripts\python.exe C:/Users/Sahara/PycharmProjects/test/python_search.py True True False Process finished with exit code