牛客网高频算法系列-BM6-判断链表是否有环标题描述判断是否有环给定链表中的环。如果有环则返回true,否则返回false。见原题:BM6判断链表是否有环解法一:双指针法用了两个指针,快慢。它们都从链表的头部开始。随后,慢指针一次向后移动一个位置,而快指针向后移动两个位置。如果链表中存在环路,那么快指针最终会在环中再次遇到慢指针。原理可参考:双指针算法原理详解解法二:Hash方法使用HashSet记录链表中的节点,然后遍历链表节点:如果链表中的节点出现在哈希表,表示链表有环,直接返回true如果链表中的节点没有出现在哈希表中,则将当前节点添加到哈希表中,然后判断下一个节点。最后,如果没有重复节点,则表示没有循环,返回false。代码导入java.util.HashSet;publicclassBm006{/***双指针**@paramhead*@return*/publicstaticbooleanhasCycle(ListNodehead){ListNodefast=head,slow=head;while(fast!=null&&fast.next!=null){//快指针每次移动2步,慢指针每次移动1步fast=fast.next.next;慢=慢.next;if(fast==slow){//fast和slow指针相遇,说明链表有环returntrue;}}//fast和slow指针不相交,说明没有循环returnfalse;}/***Hashmethod**@paramhead*@return*/publicstaticbooleanhasCycle2(ListNodehead){//用来记录链表中不重复的节点HashSet
