判断链表中是否有环
题目:
判断一个链表中是否有环。
示例:
该链表的环是由 4 5 6 7 8这几个节点构成。
思路:
我们可以类比操场上的你追我赶的情形。让A先跑,B后跑,且B的速度比A快,那么总有一个时间点,B会追上A。
① 我们定义两个指针,分别记作slow、fast。
② 让fast每次向前走两步,slow每次向前走一步。
③ 如果某一时刻,fast==slow,则说明该链表中存在环。
代码实现:
public boolean hasCycle(ListNode head) {
if(head==null || head.next == null){
return false;
}
ListNode fast = head.next;
ListNode slow = head;
while(fast!=null && fast.next!=null && slow!=null && fast!=slow){
fast = fast.next.next;
slow = slow.next;
}
if(fast==slow){
return true;
}
return false;
}