File tree Expand file tree Collapse file tree 2 files changed +37
-6
lines changed Expand file tree Collapse file tree 2 files changed +37
-6
lines changed Original file line number Diff line number Diff line change @@ -24,6 +24,12 @@ class LinkedList:
2424 def __init__ (self ):
2525 self .head = None
2626
27+ def __iter__ (self ):
28+ node = self .head
29+ while node :
30+ yield node .data
31+ node = node .next
32+
2733 def is_empty (self ):
2834 """
2935 链表头是None,则为空
@@ -111,11 +117,20 @@ def reverse(self):
111117 current = _temp # 节点偏移/迭代
112118 self .head = prev # 原来的链表头指向新的链表头
113119
114- def __iter__ (self ):
115- node = self .head
116- while node :
117- yield node .data
118- node = node .next
120+ @staticmethod
121+ def find_middle_node (head ):
122+ """
123+ 查找链表中间节点(必须保证节点的数量最少是1,否则如果初始化是空的话fast.next会报错。)
124+ 定义快慢两个指针,快的走两步,慢的走一步;如果是奇数项,快的走到头,慢的刚好走到中间;
125+ 如果是偶数项,快的指向空,慢的刚好指向中间两项的后一项
126+ :param head: 链表头
127+ :return:
128+ """
129+ slow , fast = head , head
130+ fast = fast .next if fast else None
131+ while fast and fast .next :
132+ slow , fast = slow .next , fast .next .next
133+ return slow
119134
120135
121136def main ():
@@ -161,5 +176,16 @@ def main():
161176 # link_list.show_node_data()
162177
163178
179+ def find_mid ():
180+ link = LinkedList ()
181+ n1 = Node (1 )
182+ n2 = Node (2 , n1 )
183+ n3 = Node (3 , n2 )
184+ n4 = Node (4 , n3 )
185+ n5 = Node (5 , n4 )
186+ print (link .find_middle_node (n5 ))
187+
188+
164189if __name__ == '__main__' :
165- main ()
190+ # main()
191+ find_mid ()
Original file line number Diff line number Diff line change @@ -43,6 +43,11 @@ data|next
4343![ 原来的链表头最后移动到表尾] ( ./img/reverse_linked_list_head_last.gif )
4444
45453 . 递归(相信我们都熟悉的一点是,对于树的大部分问题,基本可以考虑用递归来解决。但是我们不太熟悉的一点是,对于单链表的一些问题,也可以使用递归。可以认为单链表是一颗永远只有左(右)子树的树,因此可以考虑用递归来解决。或者说,因为单链表本身的结构也有自相似的特点,所以可以考虑用递归来解决)
46+ ### 查找链表中间节点
47+ 参见[ linked_list.find_middle_node()] ( ./linked_list.py ) 方法
48+ [ 思路] ( https://segmentfault.com/a/1190000016673724 )
49+ [ 解法] ( https://blog.csdn.net/fuxuemingzhu/article/details/81748484 )
50+
4651---
4752# 双向链表
4853## 概念
You can’t perform that action at this time.
0 commit comments