亀とウサギの競走-どのようにチェーン時計に環があると判断しますか?

1497 ワード

**
 * @Author: Kerven Han
 * @Date:
 * @Describe:              
 */
public class LinkListHasCycle {


    public static boolean judgeHasCycle(LinkNode head) {
        //        false
        if (null == head || null == head.getNext()) {
            return false;
        }
        //         ,    
        LinkNode fast = head;
        LinkNode slow = head;

        //    ,      ,         
        //              null                
        //  fast            null                  ,                       
        while (fast != null && fast.getNext() != null) {

            //  :           fast slow      ,      head      fast slow
            //  head        ,     ,  fast slow                。
            fast = fast.getNext().getNext();
            slow = slow.getNext();
            //     ,      ,        ,      ,                 ,
            //            ,          1500    ,           ,     。
            if ( fast == slow ) {
                return true;
            }
        }
        return false;
    }

}
public class LinkNode {

    private  int data;
    private LinkNode next;

    public LinkNode(int data){
        this.data = data;
    }

    public int getData() {
        return data;
    }

    public void setData(int data) {
        this.data = data;
    }

    public void setNext(LinkNode next) {
        this.next = next;
    }

    public LinkNode getNext() {
        return next;
    }
}