# -*- coding: utf-8 -*- class Node(object): """节点""" def __init__(self, data): # 数据区 self.data = data # 下一个节点区 self.next = None class SingleLinkList(object): """单链表""" def __init__(self, node=None): self.__head = node def is_empty(self): """链表是否为空""" return self.__head is None def length(self): """链表长度""" # cur游标,用来移动遍历节点 cur = self.__head # count记录数量 count = 0 while cur: count += 1 cur = cur.next return count def travel(self): """遍历整个链表""" # cur游标,用来移动遍历节点 cur = self.__head while cur: print(cur.data, end=' ') cur = cur.next print() def add(self, elem): """链表头部添加元素,头插法""" node = Node(elem) node.next = self.__head self.__head = node def append(self, elem): """链表尾部添加元素,尾插法""" node = Node(elem) if self.is_empty(): self.__head = node else: cur = self.__head while cur.next: cur = cur.next cur.next = node def insert(self, pos, elem): """指定位置添加元素""" if pos == 0: self.add(elem) elif pos > (self.length()-1): self.append(elem) elif pos < 0: if abs(pos) > self.length(): self.add(elem) else: node = Node(elem) count = 0 cur = self.__head while cur: if (count+abs(pos)) == self.length(): node.next = cur.next cur.next = node break cur = cur.next count += 1 else: node = Node(elem) count = 0 cur = self.__head while (count+1) < pos: cur = cur.next count += 1 node.next = cur.next cur.next = node def remove(self, elem): """删除节点""" if self.is_empty(): return cur = self.__head count = 0 if cur.data == elem: self.__head = cur.next return count, elem while cur.next: if cur.next.data == elem: cur.next = cur.next.next return count+1, elem cur = cur.next count += 1 def is_contain(self, elem): """查找节点是否存在""" cur = self.__head while cur: if cur.data == elem: return True cur = cur.next return False def search(self, elem): """查找节点所在位置""" cur = self.__head count = 0 while cur: if cur.data == elem: return count cur = cur.next count += 1 if __name__ == '__main__': ll = SingleLinkList() ll.travel() print(ll.is_empty()) print(ll.length()) print(ll.remove(1)) ll.add(0) ll.travel() ll.append(1) print(ll.is_empty()) print(ll.length()) ll.append(2) ll.append(3) ll.append(4) ll.append(5) ll.travel() ll.add(8) ll.add(9) ll.add(10) ll.travel() print(ll.search(8)) print(ll.search(3)) print(ll.search(6)) print(ll.search(5)) print(ll.is_contain(8)) print(ll.is_contain(3)) print(ll.is_contain(6)) print(ll.is_contain(5)) ll.travel() print(ll.remove(8)) ll.travel() print(ll.remove(10)) ll.travel() print(ll.remove(5)) ll.travel() print(ll.remove(6)) ll.travel() ll.insert(-3, 0) ll.travel() ll.insert(1, 89) ll.travel()
python实现简单单链表
最新推荐文章于 2021-02-10 01:10:23 发布