Problem
Solution
题意为,给你一个链表,这个链表的尾节点的next可能连接到了之前的某个节点,就形成了一个环,请你判断
所给的链表是否含有环。
我自己的做法就很暴力,开了set,边遍历边存下指针,判断是否有之前出现过的指针重复出现,若重复出现则
必定存在环。
在Discuss里看到了一种快慢指针解法,觉得太太太巧妙了!
设两个指针,同时出发,但一个指针每次走两步,一个指针每次走一步,若存在环,则两个指针经过一定步数
之后必定会相遇,快慢指针只需o(1)的空间复杂度。
class Solution {
public:
bool hasCycle(ListNode *head) {
if(head==nullptr) return false;
ListNode* p=head->next;
ListNode* q=head->next;
while(q&&q->next){
p=p->next;
q=q->next->next;
if(p==q) return true;
}
return false;
}
};