zoukankan      html  css  js  c++  java
  • 牛客网剑指offer第54题——链表中环的入口节点

    题目:

    给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。

    解答:

    /*
    struct ListNode {
        int val;
        struct ListNode *next;
        ListNode(int x) :
            val(x), next(NULL) {
        }
    };
    */
    class Solution {
    public:
        ListNode* EntryNodeOfLoop(ListNode* pHead)
        {
           /* ListNode*p1;
          while(pHead != nullptr)
          {
            p1 =pHead->next;
            while(p1 != nullptr)
            {
                if(pHead == p1)
                    return pHead;
                p1 = p1->next;
            }
              pHead = pHead->next;
          }
            return nullptr;*/
            set<ListNode*>node;
            pair<set<ListNode*>::iterator, bool> retpair;
            while(pHead != nullptr)
            {
              retpair=node.insert(pHead);
                if(retpair.second == false)
                    return pHead;
                pHead = pHead->next;
            }
            return nullptr;
        }
    };

    这道题的简单思路是:

    将环的入口问题看成是:在一个动态增长的数组中,找出第一个数值出现两次的数字。这样我们就可以将问题转换成利用set集合就可以解决。

    set集合的插入:insert函数返回:pair<set<T>::iterator, bool>类型的变量。

    也就是如果当前集合set中已经存在一个和要插入元素相同的元素,那么bool类型返回false。表明集合中已经存在该元素。利用这种思想,我们就可以轻松解决此问题。

     这里顺带补充一下《STL源码剖析》中对setde描述:
     
  • 相关阅读:
    UNIX 高手的另外 10 个习惯
    python中的cls到底指的是什么
    一篇文章搞懂Python装饰器所有用法
    sysbench 压测
    python面向对象进阶
    python 学生表
    搞懂蓝绿发布、灰度发布和滚动发布
    数据库之视图、索引
    Java内存模型(JMM)以及 垃圾回收机制 小结
    Java线程唤醒与阻塞
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/12584353.html
Copyright © 2011-2022 走看看