文章目录
- 1 题目理解
- 2 分析1
- 3 分析2
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;}
}