剑指OFFER 链表中环的入口结点
剑指OFFER 链表中环的入口结点
如果出现了环,说明存在后面的结点指向前面的结点,如果对此链表进行遍历,那么最终会遍历到之前已经访问过的元素.于是我使用map来记录前面所有结点被访问的次数,如果首次访问到了访问次数不等于0的结点(之前被访问过的结点),说明找到了环的入口结点.
思考:
为什么用map而不通过修改val的值来标记是否已经被访问过?
保证链表存储的值的任意性,增强程序的健壮性
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
map<ListNode*,int> m;
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
ListNode* node = pHead;
while(node != NULL)
{
if(m[node] != 0)
{
return node;
}
m[node]++;
node = node->next;
}
return NULL;
}
};