zoukankan      html  css  js  c++  java
  • 剑指OFFER_链表中环的入口节点

    剑指OFFER_链表中环的入口节点

    题目描述

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

    思路

    我的思路效率不是很高,就是遍历这个链表,同时把节点地址存进容器,然后判断新的节点地址是否已经访问过,如果是则表示是一个环,返回此地址;

    不过我的容器选择有点不好,我用的vector,还自己写了一个搜索是否访问的函数,但是其实用set效率会更高,把两份代码都贴出来:

    代码-vector版本

    typedef vector<ListNode*> vec;
    class Solution {
    public:
        bool findNode(vec &v, ListNode *node) {
            for (ListNode *n:v) {
                if (n==node) {
                    return true;
                }
            }
            return false;
        }
        ListNode* EntryNodeOfLoop(ListNode* pHead) {
            ListNode *ans = nullptr;
            ListNode *node = pHead;
            vec v;
            while (node) {
                if (findNode(v, node)) {
                    return node;
                }
                v.push_back(node);
                node = node->next;
            }
            return ans;
        }
    };
    

    代码-set版本

    class Solution {
    public:
        ListNode* EntryNodeOfLoop(ListNode* pHead)
        {
            unordered_set<ListNode*> st;
            while (pHead) {
                if (st.find(pHead) == st.end()) {
                    st.insert(pHead);
                    pHead = pHead->next;
                }
                else {
                    return pHead;
                }
            }
            return nullptr;
        }
    };
    
  • 相关阅读:
    第十二周学习进度条
    课堂练习四
    搜狗输入法
    第十一周学习进度条
    《代码大全(第二版)》阅读笔记01
    典型用户及用户场景描述
    第十周学习进度条
    团队冲刺第六天
    团队冲刺第五天
    团队冲刺第四天
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13276191.html
Copyright © 2011-2022 走看看