Linked List Cycle

Linked List Cycle

问题:

Given a linked list, determine if it has a cycle in it.

思路:

快指针,慢指针方法

我的代码:

public class Solution {

    public boolean hasCycle(ListNode head) {

        if(head == null || head.next == null)

            return false ;

        ListNode one = head ;

        ListNode two = head.next.next ;

        while(one != null && two != null)

        {

            if(one == two)

                return true ;

            one = one.next ;

            if(two.next == null)

                break ;

            two = two.next.next ;

        }

        return false ;

        

    }

}
View Code

他人代码:

public class Solution {

    public boolean hasCycle(ListNode head) {

        if (head == null) {

            return false;

        }



        ListNode fast = head, slow = head;

        do {

            if (fast.next == null || fast.next.next == null) {

                return false;

            }

            fast = fast.next.next;

            slow = slow.next;

        } while (fast != slow);



        return true;

    }

}
View Code

学习之处:

  • 如果没有cycle,快指针肯定先到null
  • do while的妙用 可以进行一次判断了

你可能感兴趣的:(list)