diff --git a/README.md b/README.md index df50f1be..3bbd53a0 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@
最新文章会首发在公众号「代码随想录」,扫码看看吧,你会发现相见恨晚!
-
+
## 如何使用该刷题攻略 diff --git a/pics/公众号二维码.jpg b/pics/公众号二维码.jpg new file mode 100644 index 00000000..a91b2494 Binary files /dev/null and b/pics/公众号二维码.jpg differ diff --git a/problems/0142.环形链表II.md b/problems/0142.环形链表II.md index 3328845f..44f91db3 100644 --- a/problems/0142.环形链表II.md +++ b/problems/0142.环形链表II.md @@ -6,7 +6,11 @@

-# 142.环形链表II + +> 找到有没有环已经很不容易了,还要让我找到环的入口? + + +## 142.环形链表II https://leetcode-cn.com/problems/linked-list-cycle-ii/ @@ -19,7 +23,7 @@ https://leetcode-cn.com/problems/linked-list-cycle-ii/ ![循环链表](https://img-blog.csdnimg.cn/20200816110112704.png) -# 思路 +## 思路 这道题目,不仅考察对链表的操作,而且还需要一些数学运算。 @@ -28,7 +32,7 @@ https://leetcode-cn.com/problems/linked-list-cycle-ii/ * 判断链表是否环 * 如果有环,如何找到这个环的入口 -## 判断链表是否有环 +### 判断链表是否有环 可以使用快慢指针法, 分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。 @@ -54,7 +58,7 @@ fast和slow各自再走一步, fast和slow就相遇了 ![141.环形链表](https://tva1.sinaimg.cn/large/008eGmZEly1goo4xglk9yg30fs0b6u0x.gif) -## 如果有环,如何找到这个环的入口 +### 如果有环,如何找到这个环的入口 **此时已经可以判断链表是否有环了,那么接下来要找这个环的入口了。** @@ -102,10 +106,9 @@ fast指针走过的节点数:` x + y + n (y + z)`,n为fast指针在环内走 其实这种情况和n为1的时候 效果是一样的,一样可以通过这个方法找到 环形的入口节点,只不过,index1 指针在环里 多转了(n-1)圈,然后再遇到index2,相遇点依然是环形的入口节点。 +代码如下: -# C++代码 - -``` +```C++ /** * Definition for singly-linked list. * struct ListNode { @@ -173,13 +176,14 @@ public: 好了,这次把为什么第一次在环中相遇,slow的 步数 是 x+y 而不是 x + 若干环的长度 + y ,用数学推理了一下,算是对[链表:环找到了,那入口呢?](https://mp.weixin.qq.com/s/_QVP3IkRZWx9zIpQRgajzA)的补充。 -# 总结 +## 总结 这次可以说把环形链表这道题目的各个细节,完完整整的证明了一遍,说这是全网最详细讲解不为过吧,哈哈。 -## 其他语言补充 +## 其他语言版本 + +python: -python ```python class Solution: def detectCycle(self, head: ListNode) -> ListNode: @@ -200,7 +204,6 @@ class Solution: return None ``` -欢迎大家补充其他语言的版本实现哈