package jxau.lyx.link;
/**
*
* @author: liyixiang
* @data:2014-10-2
* @题目大意:
* 判断一个单链表中是否有环
* @主要思路:
* 这里也是用到两个指针。如果一个链表中有环,也就是说用一个指针去遍历,
* 是永远走不到头的。因此,我们可以用两个指针去遍历,一个指针一次走两步
* 一个指针一次走一步,如果有环,两个指针肯定会在环中相遇。
* @时间复杂度:
* O(n)
* @空间复杂度:
*/
public class HasCycle {
//结点
private static class Node {
int val;
Node next;
public Node(int val) {
this.val = val;
}
}
public boolean hasCycle(Node head){
Node fast = head; // 快指针每次前进两步
Node slow = head; // 慢指针每次前进一步
while (fast != null && fast.next != null) {
fast = fast.next.next;
slow = slow.next;
if (fast == slow) { // 相遇,存在环
return true;
}
}
return false;
}
}
转载于:https://my.oschina.net/liyixiangBlog/blog/323870