题目要求:
分析:
这道题我们利用双指针法,分别为快指针fast和慢指针slow,其中fast的步长为2,slow的步长为1,我们知道:
- 如果该链表有环,那么快指针肯定会再次追上慢指针;
- 如果该链表没有环,那么快指针就会比慢指针早一些指向链表的末尾或者倒数第一个;
所以我们只需要判断fast与slow是否会相等即可:
- 如果相等,则证明该链表有环,返回true;
- 如果不相等,则证明该链表无环,直接返回false。
具体代码如下:
/**
* Definition for singly-linked list.
* class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public boolean hasCycle(ListNode head) {
if( head == null || head.next == null ){
return false;
}
ListNode fast = head, slow = head;
while( fast != null && fast.next != null){
slow = slow.next;
fast = fast.next.next;
if( slow == fast ){
return true;
}
}
return false;
}
}