本文将提供两种解法:哈希表和双指针(快慢指针)
1.哈希表解法:我们将已经遍历过的节点加入到Set集合中,然后判断如果遍历的当前节点在集合中已存在,那么就是有环状结构,如果没有,将一直遍历到链表尾部,需要用额外的空间来辅助:
1 | public boolean hasCycle(ListNode head) { |
2.利用双指针,利用fast和slow两个指针,可以想象成两个运动员在环形赛道上奔跑,fast在slow前方,那么总有一个时刻,fast会再次与slow相遇,我们就是采取这种想法
1 | public class Solution { |