原题链接:https://leetcode.com/problems/linked-list-cycle/
题目:
Given a linked list, determine if it has a cycle in it.
Follow up:
Can you solve it without using extra space?
思路:
两个指针,一个移动一步,一个移动两步,所以两个指针相对距离每移动一次就加一,如果有循环,一定可以在 循环长度/(2-1) 个循环后相遇,没有循环则会遇到null
算法:
1. public boolean hasCycle(ListNode head) {
2. null;// p走两步,q走一步
3. if (q == null || q.next == null) {// 单结点无循环时
4. return false;
5. }
6. p = q.next.next;
7. while (p != null) {
8. if (q == p) {
9. return true;
10. }
11. if (p.next == null) {// p走两步,要判断p.next为空
12. return false;
13. }
14. p = p.next.next;
15. q = q.next;
16. }
17. return false;
18. }