1 题目理解
输入:一个单向链表。
输出:如果链表中有环,输出true。否则输出false。
规则:单向链表只能向前移动。
2 分析1
可以把节点放入map中,不断遍历。如果碰到已经遍历的节点,则说明有环。但是这样的空间复杂度是O(n)不符合要求。
3 分析2
使用快慢指针。想象你在操场跑步,一个人跑得快,一个人跑得慢。经过若干圈以后,这两个人一定会在某一点再次相遇。这个相遇时,跑得快的人一定比跑得慢的人多跑一圈。具体查看之前的一篇文章。
public class Solution {
public boolean hasCycle(ListNode head) {
if(head == null) return false;
ListNode fast = head,slow = head;
while(fast.next!=null && fast.next.next!=null){
fast = fast.next.next;
slow = slow.next;
if(slow == fast) return true;
}
return false;
}
}