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描述:
     
  • 相关阅读:
    Hadoop书籍介绍
    WeakReference,SoftReference 和 PhatomReference 浅析
    如何在Java中定义常量(Constant)
    也谈谈Java的垃圾收集(garbage collection)
    csdn的新家
    安装和使用Oracle Instant Client 和 SQLPlus
    Perl中的grep和map
    用Devel::NYTProf 优化perl脚本性能
    DataBase
    Linux下配置listener和tns
  • 原文地址:https://www.cnblogs.com/shaonianpi/p/12584353.html
Copyright © 2011-2022 走看看