33#
44# Author:Lee
55
6- class Node ():
7- '''链表结构的Node节点'''
86
9- def __init__ (self , data , next = None ):
10- '''Node节点的初始化方法.
7+ class Node (object ):
8+ """链表结构的Node节点"""
9+
10+ def __init__ (self , data , next_node = None ):
11+ """Node节点的初始化方法.
1112 参数:
1213 data:存储的数据
1314 next:下一个Node节点的引用地址
14- '''
15+ """
1516 self .__data = data
16- self .__next = next
17+ self .__next = next_node
1718
1819 @property
1920 def data (self ):
20- ''' Node节点存储数据的获取.
21+ """ Node节点存储数据的获取.
2122 返回:
2223 当前Node节点存储的数据
23- '''
24+ """
2425 return self .__data
2526
2627 @data .setter
2728 def data (self , data ):
28- ''' Node节点存储数据的设置方法.
29+ """ Node节点存储数据的设置方法.
2930 参数:
3031 data:新的存储数据
31- '''
32+ """
3233 self .__data = data
3334
3435 @property
35- def next (self ):
36- ''' 获取Node节点的next指针值.
36+ def next_node (self ):
37+ """ 获取Node节点的next指针值.
3738 返回:
3839 next指针数据
39- '''
40+ """
4041 return self .__next
4142
42- @next .setter
43- def next (self , next ):
44- ''' Node节点next指针的修改方法.
43+ @next_node .setter
44+ def next_node (self , next_node ):
45+ """ Node节点next指针的修改方法.
4546 参数:
4647 next:新的下一个Node节点的引用
47- '''
48- self .__next = next
48+ """
49+ self .__next = next_node
4950
5051
51- class SinglyLinkedList ():
52- ''' 单向链表'''
52+ class SinglyLinkedList (object ):
53+ """ 单向链表"""
5354
5455 def __init__ (self ):
55- ''' 单向列表的初始化方法.'''
56+ """ 单向列表的初始化方法."""
5657 self .__head = None
5758
5859 def find_by_value (self , value ):
59- ''' 按照数据值在单向列表中查找.
60+ """ 按照数据值在单向列表中查找.
6061 参数:
6162 value:查找的数据
6263 返回:
6364 Node
64- '''
65+ """
6566 node = self .__head
66- if node != None and node .data != value :
67- node = node .next
68- else :
69- return node
67+ while (node is not None ) and (node .data != value ):
68+ node = node .next_node
69+ return node
7070
7171 def find_by_index (self , index ):
72- ''' 按照索引值在列表中查找.
72+ """ 按照索引值在列表中查找.
7373 参数:
7474 index:索引值
7575 返回:
7676 Node
77- '''
77+ """
7878 node = self .__head
7979 pos = 0
80- while node != None and pos != index :
81- node = node .next
80+ while ( node is not None ) and ( pos != index ) :
81+ node = node .next_node
8282 pos += 1
8383 return node
8484
8585 def insert_to_head (self , value ):
86- ''' 在链表的头部插入一个存储value数值的Node节点.
86+ """ 在链表的头部插入一个存储value数值的Node节点.
8787 参数:
8888 value:将要存储的数据
89- '''
89+ """
9090 node = Node (value )
91- node .next = self .__head
91+ node .next_node = self .__head
9292 self .__head = node
9393
9494 def insert_after (self , node , value ):
95- ''' 在链表的某个指定Node节点之后插入一个存储value数据的Node节点.
95+ """ 在链表的某个指定Node节点之后插入一个存储value数据的Node节点.
9696 参数:
9797 node:指定的一个Node节点
9898 value:将要存储在新Node节点中的数据
99- '''
100- if node == None : # 如果指定在一个空节点之后插入数据节点,则什么都不做
99+ """
100+ if node is None : # 如果指定在一个空节点之后插入数据节点,则什么都不做
101101 return
102102
103103 new_node = Node (value )
104- new_node .next = node .next
104+ new_node .next_node = node .next
105105 node .next = new_node
106106
107107 def insert_before (self , node , value ):
108- ''' 在链表的某个指定Node节点之前插入一个存储value数据的Node节点.
108+ """ 在链表的某个指定Node节点之前插入一个存储value数据的Node节点.
109109 参数:
110110 node:指定的一个Node节点
111111 value:将要存储在新的Node节点中的数据
112- '''
113- if node == None or self .__head == None : # 如果指定在一个空节点之前或者空链表之前插入数据节点,则什么都不做
112+ """
113+ if ( node is None ) or ( self .__head is None ) : # 如果指定在一个空节点之前或者空链表之前插入数据节点,则什么都不做
114114 return
115115
116116 if node == self .__head : # 如果是在链表头之前插入数据节点,则直接插入
@@ -120,164 +120,164 @@ def insert_before(self, node, value):
120120 new_node = Node (value )
121121 pro = self .__head
122122 not_found = False # 如果在整个链表中都没有找到指定插入的Node节点,则该标记量设置为True
123- while pro .next != node : # 寻找指定Node之前的一个Node
124- if pro .next == None : # 如果已经到了链表的最后一个节点,则表明该链表中没有找到指定插入的Node节点
123+ while pro .next_node != node : # 寻找指定Node之前的一个Node
124+ if pro .next_node is None : # 如果已经到了链表的最后一个节点,则表明该链表中没有找到指定插入的Node节点
125125 not_found = True
126126 break
127127 else :
128- pro = pro .next
129- if not_found == False :
130- pro .next = new_node
131- new_node .next = node
128+ pro = pro .next_node
129+ if not not_found :
130+ pro .next_node = new_node
131+ new_node .next_node = node
132132
133133 def delete_by_node (self , node ):
134- ''' 在链表中删除指定Node的节点.
134+ """ 在链表中删除指定Node的节点.
135135 参数:
136136 node:指定的Node节点
137- '''
138- if self .__head == None : # 如果链表是空的,则什么都不做
137+ """
138+ if self .__head is None : # 如果链表是空的,则什么都不做
139139 return
140140
141141 if node == self .__head : # 如果指定删除的Node节点是链表的头节点
142- self .__head = node .next
142+ self .__head = node .next_node
143143 return
144144
145145 pro = self .__head
146146 not_found = False # 如果在整个链表中都没有找到指定删除的Node节点,则该标记量设置为True
147- while pro .next != node :
148- if pro .next == None : # 如果已经到链表的最后一个节点,则表明该链表中没有找到指定删除的Node节点
147+ while pro .next_node != node :
148+ if pro .next_node is None : # 如果已经到链表的最后一个节点,则表明该链表中没有找到指定删除的Node节点
149149 not_found = True
150150 break
151151 else :
152- pro = pro .next
153- if not_found == False :
154- pro .next = node .next
152+ pro = pro .next_node
153+ if not not_found :
154+ pro .next_node = node .next_node
155155
156156 def delete_by_value (self , value ):
157- ''' 在链表中删除指定存储数据的Node节点.
157+ """ 在链表中删除指定存储数据的Node节点.
158158 参数:
159159 value:指定的存储数据
160- '''
161- if self .__head == None : # 如果链表是空的,则什么都不做
160+ """
161+ if self .__head is None : # 如果链表是空的,则什么都不做
162162 return
163163
164164 if self .__head .data == value : # 如果链表的头Node节点就是指定删除的Node节点
165- self .__head = self .__head .next
165+ self .__head = self .__head .next_node
166166
167167 pro = self .__head
168- node = self .__head .next
168+ node = self .__head .next_node
169169 not_found = False
170170 while node .data != value :
171- if node .next == None : # 如果已经到链表的最后一个节点,则表明该链表中没有找到执行Value值的Node节点
171+ if node .next_node is None : # 如果已经到链表的最后一个节点,则表明该链表中没有找到执行Value值的Node节点
172172 not_found = True
173173 break
174174 else :
175175 pro = node
176- node = node .next
177- if not_found == False :
178- pro .next = node .next
176+ node = node .next_node
177+ if not_found is False :
178+ pro .next_node = node .next_node
179179
180- def delete_last_N_node (self , n ):
181- ''' 删除链表中倒数第N个节点.
180+ def delete_last_n_node (self , n ):
181+ """ 删除链表中倒数第N个节点.
182182 主体思路:
183183 设置快、慢两个指针,快指针先行,慢指针不动;当快指针跨了N步以后,快、慢指针同时往链表尾部移动,
184184 当快指针到达链表尾部的时候,慢指针所指向的就是链表的倒数第N个节点
185185 参数:
186186 n:需要删除的倒数第N个序数
187- '''
187+ """
188188 fast = self .__head
189189 slow = self .__head
190190 step = 0
191191
192192 while step <= n :
193- fast = fast .next
193+ fast = fast .next_node
194194 step += 1
195195
196- while fast .next != None :
196+ while fast .next_node is not None :
197197 tmp = slow
198- fast = fast .next
199- slow = slow .next
198+ fast = fast .next_node
199+ slow = slow .next_node
200200
201- tmp .next = slow .next
201+ tmp .next_node = slow .next_node
202202
203203 def find_mid_node (self ):
204- ''' 查找链表中的中间节点.
204+ """ 查找链表中的中间节点.
205205 主体思想:
206206 设置快、慢两种指针,快指针每次跨两步,慢指针每次跨一步,则当快指针到达链表尾部的时候,慢指针指向链表的中间节点
207207 返回:
208208 node:链表的中间节点
209- '''
209+ """
210210 fast = self .__head
211211 slow = self .__head
212212
213- while fast .next != None :
214- fast = fast .next . next
215- slow = slow .next
213+ while fast .next_node is not None :
214+ fast = fast .next_node . next_node
215+ slow = slow .next_node
216216
217217 return slow
218218
219219 def create_node (self , value ):
220- ''' 创建一个存储value值的Node节点.
220+ """ 创建一个存储value值的Node节点.
221221 参数:
222222 value:将要存储在Node节点中的数据
223223 返回:
224224 一个新的Node节点
225- '''
225+ """
226226 return Node (value )
227227
228228 def print_all (self ):
229- ''' 打印当前链表所有节点数据.'''
229+ """ 打印当前链表所有节点数据."""
230230 pos = self .__head
231- if pos == None :
232- print (' 当前链表还没有数据' )
231+ if pos is None :
232+ print (" 当前链表还没有数据" )
233233 return
234- while pos .next != None :
235- print (str (pos .data ) + ' --> ' , end = '' )
236- pos = pos .next
234+ while pos .next_node is not None :
235+ print (str (pos .data ) + " --> " , end = "" )
236+ pos = pos .next_node
237237 print (str (pos .data ))
238238
239239 def reversed_self (self ):
240- ''' 翻转链表自身.'''
241- if self .__head == None or self .__head .next == None : # 如果链表为空,或者链表只有一个节点
240+ """ 翻转链表自身."""
241+ if self .__head is None or self .__head .next is None : # 如果链表为空,或者链表只有一个节点
242242 return
243243
244244 pre = self .__head
245245 node = self .__head .next
246- while node != None :
246+ while node is not None :
247247 pre , node = self .__reversed_with_two_node (pre , node )
248248
249249 self .__head .next = None
250250 self .__head = pre
251251
252252 def __reversed_with_two_node (self , pre , node ):
253- ''' 翻转相邻两个节点.
253+ """ 翻转相邻两个节点.
254254 参数:
255255 pre:前一个节点
256256 node:当前节点
257257 返回:
258258 (pre,node):下一个相邻节点的元组
259- '''
260- tmp = node .next
261- node .next = pre
259+ """
260+ tmp = node .next_node
261+ node .next_node = pre
262262 pre = node # 这样写有点啰嗦,但是能让人更能看明白
263263 node = tmp
264- return ( pre , node )
264+ return pre , node
265265
266266 def has_ring (self ):
267- ''' 检查链表中是否有环.
267+ """ 检查链表中是否有环.
268268 主体思想:
269269 设置快、慢两种指针,快指针每次跨两步,慢指针每次跨一步,如果快指针没有与慢指针相遇而是顺利到达链表尾部
270270 说明没有环;否则,存在环
271271 返回:
272272 True:有环
273273 False:没有环
274- '''
274+ """
275275 fast = self .__head
276276 slow = self .__head
277277
278- while fast .next != None and fast != None :
279- fast = fast .next
280- slow = slow .next
278+ while ( fast .next_node is not None ) and ( fast is not None ) :
279+ fast = fast .next_node
280+ slow = slow .next_node
281281 if fast == slow :
282282 return True
283283
0 commit comments