1.代码
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
#include<unordered_map>
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
unordered_map<*ListNode,bool> mymap;
ListNode *begin = head;
bool flag = false;
mymap[begin] = true;
while(begin->next != NULL){
if(mymap.count(begin->next)>0){
flag = true;
return begin->next;
}
mymap[begin->next] = true;
begin = begin->next;
}
return NULL;
}
};
2.思路
从头开始扫描链表,并用哈希表记录,每扫到一个结点判断一次它是否已经在哈希表中,第一个二次出现的结点就是所求的结点。