Python实现不带头结点的单链表
1 # 创建一个节点类 2 class Node: 3 def __init__(self, item): 4 self.item = item 5 self.next = None 6 7 8 # 创建一个单链表类 9 class SingleLink: 10 def __init__(self): 11 self.header = None # 初始化单链表的头结点 12 self.length = 0 # length:单链表的长度 13 14 # 判断单链表是否为空 15 def is_empty(self): 16 if self.header is None: 17 return True 18 else: 19 return False 20 21 ''' 22 实现向单链表添加元素的功能: 23 有三种实现方式: 24 1.头插法 25 2.尾插法 26 3.从任意指定位置添加元素 27 ''' 28 29 # 1.头插法 30 def preadd(self, value): 31 node = Node(value) 32 if self.is_empty(): 33 self.header = node 34 else: 35 node.next = self.header 36 self.header = node 37 self.length += 1 38 39 # 2.尾插法 40 def append(self, value): 41 node = Node(value) 42 cur = self.header 43 if self.length==0: 44 self.preadd(value) 45 return 46 while cur.next is not None: 47 cur = cur.next 48 cur.next = node 49 self.length += 1 50 51 # 3.从任意指定位置添加元素 52 def insert(self, index, value): 53 node = Node(value) 54 cur = self.header 55 if index <= 0: 56 self.preadd(value) 57 self.length += 1 58 elif index > self.length: 59 self.append(value) 60 self.length += 1 61 else: 62 for i in range(1, index - 1): 63 cur = cur.next 64 node.next = cur.next 65 cur.next = node 66 self.length += 1 67 68 ''' 69 实现从单链表中删除元素的功能 70 有三种删除方式: 71 1.根据指定位置来删除元素 72 2.直接删除元素 73 3.清空单链表 74 ''' 75 76 # 1.根据指定位置来删除元素 77 def __delitem__(self, index): 78 if index <= 0 or index > self.length: 79 raise IndexError 80 if index == 1: 81 self.header = self.header.next 82 else: 83 cur = self.header 84 for i in range(1, index - 1): 85 cur = cur.next 86 cur.next = cur.next.next 87 self.length -= 1 88 89 # 2.直接删除元素 90 def __delete__(self, value): 91 self.__delitem__(self.isExist(value)) 92 self.length -= 1 93 94 # 3.清空单链表 95 def clear(self): 96 while self.length != 0: 97 self.__delitem__(self.length) 98 self.length -= 1 99 ''' 100 实现修改元素的功能 101 1.修改指定位置的元素 102 ''' 103 # 1.修改指定位置的元素 104 def __setitem__(self, index, value): 105 cur=self.header 106 if not isinstance(index,int): 107 raise TypeError 108 if 0<index<self.length: 109 for i in range(index-1): 110 cur=cur.next 111 cur.item=value 112 else: 113 print('您输入的信息有误!') 114 ''' 115 实现对单链表的查找功能 116 有三种实现方式: 117 1.查找某元素,并返回其在链表中的位置 118 2.根据位置来查找对应的元素 119 3.遍历单链表,查找出所有元素 120 ''' 121 122 # 1.查找某元素,并返回其在链表中的位置 123 def isExist(self, value): 124 cur = self.header 125 for i in range(self.length): 126 if cur.item == value: 127 return i + 1 128 cur = cur.next 129 130 # 2.根据位置来查找对应的元素 131 def __getitem__(self, index): 132 cur = self.header 133 if index <= 0 or index > self.length: 134 return print('您输入的信息有误') 135 for i in range(index - 1): 136 cur = cur.next 137 return print('第%d个位置的元素是%d' % (index, cur.item)) 138 139 # 3.遍历单链表,查找出所有元素 140 def show(self): 141 cur = self.header 142 if self.length == 0: 143 print('目前单链表中没有数据!') 144 else: 145 print('目前单链表的元素有:', end=' ') 146 for i in range(self.length): 147 print('%s' % cur.item, end=' ') 148 cur = cur.next 149 print('\n') 150 151 152 if __name__ == '__main__': 153 s = SingleLink() 154 s.preadd(12) 155 s.preadd(23) 156 s.preadd(32) 157 s.show() 158 s.append(14) 159 s.append(43) 160 s.append(15) 161 s.show() 162 print('元素32在单链表的第%d个位置' % s.isExist(32)) 163 print('从第三个位置插入元素:57') 164 s.insert(3, 57) 165 s.show() 166 print('删除第一个位置的元素') 167 s.__delitem__(1) 168 s.show() 169 print('直接删除元素43:') 170 s.__delete__(43) 171 s.show() 172 s.__getitem__(2) 173 s.__setitem__(3,9000) 174 s.show() 175 print('清空单链表:') 176 s.clear() 177 s.show()