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()