题目四:
解法一:(哈希表 hashSet或者hashMap)
解题思路: 这个题,看到之后,还是想不出来的,看了随想录的解法,虽然看懂了,但是自己肯定是想
不到的。后来一看到hashSet,就知道应该怎么做了,对于这种题使用哈希表真是不要太方便了吧。
我们遍历链表中的每个节点,并将它记录下来;一旦遇到了此前遍历过的节点,就可以判定链表中存在
环。借助哈希表可以很方便地实现。
总结: 遇到这种重复相关的题,可以多想一想hashSet。
解法二:(快慢指针)
解题思路:我们使用两个指针,fast 与 slow。它们起始都位于链表的头部。随后,slow 指针每次向后移
动一个位置,而 fast 指针向后移动两个位置。如果链表中存在环,则 fast 指针最终将再次与 slow 指针
在环中相遇。
根据代码随想录中的推断可以得出:因此,当发现 slow 与 fast 相遇时,我们再额外使用一个指针 ptr。
起始,它指向链表头部;随后,它和 slow 每次向后移动一个位置。最终,它们会在入环点相遇。
总结: 如果链表中要判断是否有环,可以使用hashMap或者使用快慢指针,快慢指针中,慢指针一步一
步走,快指针中两步两步走,如果有环,慢指针在第一圈环内一定会与快指针相遇的。如果要找到环形
的入口,需要先找到相遇点,然后保存为ptr,将慢指针从头结点开始,一起一步一步走,相等时,便是
环的入口了。