定义两个指针,同时从链表的头节点出发,一个指针一次走一步,另一个指针一次走两步。如果走得快的指针追上了走得慢的指针,那么链表就是环形链表;如果走得快的指针走到了链表的末尾(next指向 NULL)都没有追上第一个指针,那么链表就不是环形链表。
import java.util.*; /** * class ListNode { * int val; * ListNode next; * } */ public class Solution { public boolean checkHasCycle(ListNode head) { if(head==null || head.next==null){ return false; } ListNode p1=head.next; ListNode p2=head.next.next; while(p1!=null&&p2!=null){ if(p1==p2){ return true; } p1=p1.next; if(p2.next!=null){ p2=p2.next.next; }else{ p2=null; } } return false; } }