LeetCode链接:https://leetcode-cn.com/problems/linked-list-cycle/
设想一个环形跑道,两个人都向同一个方向跑,一个跑得慢,一个跑得快
跑上一段时间,跑得快的肯定会追上跑得慢的
快慢指针问题,可自行百度
思路:
1.链表判空
2.设置两个指针slow和fast,均从head开始
3.只要fast本身不是空,或者fast下一跳不为空,则slow向后移动一位,fast向后移动两位
4.移动过程中,如果出现slow和fast指向同一节点,则判别有环
5.如果循环正常结束,则代表slow和fast没有相遇,则无环
public class Solution {
public boolean hasCycle(ListNode head) {
//1.
if (head == null || head.next == null)
return false;
//2.
ListNode fast = head;
ListNode slow = head;
//3.
while (fast != null && fast.next != null) {
slow = slow.next;
fast = fast.next.next;
//4.
if (slow == fast)
return true;
}
//5.
return false;
}
}