题解 | #判断链表中是否有环#
判断链表中是否有环
http://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9
既然有环的时候,环头的地址必然出现2次,那么使用find时间复杂度为O(1)的哈希表,用链表元素的地址进行依次插入,并每次插入前检查是否存在即可。
/**
- Definition for singly-linked list.
- struct ListNode {
- int val;
- ListNode *next;
- ListNode(int x) : val(x), next(NULL) {}
- };
- /
include
class Solution {
public:
bool hasCycle(ListNode *head) {unordered_map<struct ListNode*, struct ListNode*> map; if(head == NULL){return false;} struct ListNode *p = head; while(p->next != NULL){ if(map.find(p) != map.end()){ return true; } else { map.insert(pair<struct ListNode*, struct ListNode*>(p,p)); p = p->next; } } return false;}
};
