题目大意:给出一个链表,判断链表中是否有环,如果有环则返回环的起点,如果没有环则返回NULL。
算法思想:
遍历链表,将链表中的每个节点放入map容器中,并作标记,遍历节点时如果遇到做标记的节点则表明有环并返回该节点。如果遍历完链表则表明没环则返回NULL。
代码如下:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
if(head==NULL) return head;
ListNode* p=head;
map<ListNode*,int> node;
while(p!=NULL){
if(node[p]==1) return p;
node[p]++;
p=p->next;
}
return NULL;
}
};