题目描述
判断一个链表中是否有环
思路:
- 首先判断头结点是否为空
- 若是,代表链表不存在,返回false
- 若不是,继续下一步判断
- 定义一个快指针(走两步)
- 定义一个慢指针(走1步)
- 一开始都是指向头结点的
- 循环条件(快指针不为空,快指针的下一个不为空)
- 快指针不为空 契合偶数结点个数
- 快指针的下一个不为空 契合奇数结点个数
- 如果快指针追上慢指针,代表有环,同时指向同一个结点
图片
代码实现
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null) return false;//如果头结点为空,就不存在这个链表
ListNode fast = head;
ListNode slow = head;
while(fast != null && fast.next!= null){
fast = fast.next.next;
slow = slow.next;
if(fast == slow){
return true;
}
}
return false;
}
}