码迷,mamicode.com
首页 > 其他好文 > 详细

剑指OFFER 链表中环的入口结点

时间:2020-01-15 13:44:23      阅读:14      评论:0      收藏:0      [点我收藏+]

标签:node   try   public   遍历   pre   记录   eof   出现   使用   

剑指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;
    }
};

剑指OFFER 链表中环的入口结点

标签:node   try   public   遍历   pre   记录   eof   出现   使用   

原文地址:https://www.cnblogs.com/virgildevil/p/12196069.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!