目录
1、题目
2、解题思路
快慢指针法
我们可以创建一个fast引用,一个slow引用,fast一次走两步,slow一次走一步。如果链表是循环的那么fast总会与slow指向同一个节点。如果不是循环链表那么fast或者fast.next会为空。
注意事项:
1、当只有一个结点或者没有节点的时候我们需要进行判断。
2、判断的时候要把this.head!=null放在this.head.next的前面防止出现异常。
3、要在fast引用走之前判断fast或者fast.next是否为空,不然也会抛异常。
3、解题代码
/**
* 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.next;
ListNode slow=head;
while(fast!=slow){
if(fast==null||fast.next==null){
return false;
}
slow=slow.next;
fast=fast.next.next;
}
return true;
}
}