class Node(object): """构造节点""" def __init__(self,item): self.elem = item self.next = None class SingleLinkList(object): """单链表""" def __init__(self,item=None): """构造一个单链表""" if item == None: node = None else: node = Node(item) self.__head = node def is_empty(self): """判空""" return self.__head == None def length(self): """返回链表的长度""" cur = self.__head count = 0 while cur != None: count += 1 cur = cur.next return count def travel(self): """遍历链表""" cur = self.__head while cur != None: if cur.next == None: print(cur.elem) else: print(cur.elem,end=" ") cur = cur.next def append(self,item): """从尾部添加元素""" #必须要遍历 node = Node(item) cur = self.__head if cur == None: self.__head = node else: while cur.next != None: cur = cur.next cur.next = node def add(self,item): """从链表头部添加元素""" node = Node(item) node.next = self.__head self.__head = node def inssert(self,item,loc): """在链表的任意位置添加元素""" #loc为添加位置(从0开始索引) node = Node(item) if loc == 0: self.add(item) elif loc > self.length() or loc < 0: print("errpr: single link list is not length") else: cur = self.__head count = 0 while count < (loc - 1):#定位到插入位置的前一个 count += 1 cur = cur.next node.next = cur.next#把插入位置的节点指给构造的node的next cur.next = node#把前一个的next只给node #注:尾部插入无特殊情况 def search(self,loc): """查找节点(索引),返回节点的元素""" if loc >= self.length() or loc < 0: return "errpr: single link list is not length" else: sur = self.__head count = 0 while count < loc: count += 1 sur = sur.next return sur.elem def remove(self,loc): """删除元素""" #loc为索引位置(从0开始索引) if loc >= self.length() or loc < 0: return "errpr: single link list is not length" elif loc == 0: remove_elem = self.__head.elem sur = self.__head.next self.__head = sur else: sur = self.__head count = 0 while count < (loc - 1): count += 1 sur = sur.next remove_elem = sur.next.elem sur.next = sur.next.next return remove_elem if __name__ == "__main__": sll = SingleLinkList(2) print(sll.is_empty()) print(sll.length()) sll.travel() sll.append(3) sll.append(4) sll.append(5) sll.add(1) sll.inssert(11,5) print(sll.is_empty()) print(sll.length()) sll.travel() print(sll.remove(1)) sll.travel() print(sll.search(3))