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;
        }
    };
    
  • 相关阅读:
    如何成为合格的技术面试官?
    互联网上有多少个网站?
    前端领域不需要架构师?
    WebAssembly 简介
    git常用命令
    剑指offer-基本思想学习(未包括代码)
    OS知识点总结
    对软件工程的一点认识
    项目实现过程的每个阶段
    编译原理课程设计总结
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13276191.html
Copyright © 2011-2022 走看看