你能给出空间复杂度的解法么?
对于这个问题我们可以采用“快慢指针”的方法:是有两个指针fast和slow,开始的时候两个指针都指向链表头head,然后在每一步操作中slow向前走一步即:slow = slow->next,而fast每一步向前两步即:fast = fast->next->next。由于fast要比slow移动的快,如果有环,fast一定会先进入环,而slow后进入环。当两个指针都进入环之后,经过一定步的操作之后二者一定能够在环上相遇,并且此时slow还没有绕环一圈,也就是说一定是在slow走完第一圈之前相遇。证明可以看下图: /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: bool hasCycle(ListNode *head) { if(head==NULL) { return false; } ListNode *slow, *fast; slow=fast=head; while(slow!=NULL && fast!=NULL && fast->next!=NULL) { slow=slow->next; fast=fast->next->next; if(slow==fast) { return true; } } return false; } };转自https://www.cnblogs.com/yorkyang/p/10876604.html