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 ; } }
他人代码:
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; } }
学习之处:
- 如果没有cycle,快指针肯定先到null
- do while的妙用 可以进行一次判断了
if(null==node || node.next==null) return false;
ListNode slowNode = node;
ListNode fastNode = node.next.next;
while(fastNode!=null && fastNode.next!=null){
if(slowNode == fastNode) return true;
slowNode = slowNode.next;
fastNode = fastNode.next.next;
}
return false;