最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何通過C++求出鏈表中環(huán)的入口結點

 更新時間:2021年12月10日 10:34:18   作者:翟天保Steven  
本文主要介紹了通過C++求解鏈表中環(huán)的入口結點,即給一個長度為n鏈表,若其中包含環(huán),請找出該鏈表的環(huán)的入口結點,否則,返回null。需要的朋友可以參考一下

題目描述:

給一個長度為n鏈表,若其中包含環(huán),請找出該鏈表的環(huán)的入口結點,否則,返回null。

數(shù)據(jù)范圍: n≤10000,1<=結點值<=10000

要求:空間復雜度 O(1),時間復雜度 O(n)

例如,輸入{1,2},{3,4,5}時,對應的環(huán)形鏈表如下圖所示:

可以看到環(huán)的入口結點的結點值為3,所以返回結點值為3的結點。

輸入描述:

輸入分為2段,第一段是入環(huán)前的鏈表部分,第二段是鏈表環(huán)的部分,后臺會根據(jù)第二段是否為空將這兩段組裝成一個無環(huán)或者有環(huán)單鏈表

返回值描述:

返回鏈表的環(huán)的入口結點即可,我們后臺程序會打印這個結點對應的結點值;若沒有,則返回對應編程語言的空結點即可。

示例:

輸入:

{1,2},{3,4,5}

返回值:

3

說明:

返回環(huán)形鏈表入口結點,我們后臺程序會打印該環(huán)形鏈表入口結點對應的結點值,即3

解題思路:

本題考察數(shù)據(jù)結構鏈表的使用,有兩種解法。

  1. 哈希Set。用容器哈希Set遍歷存儲指針,當某次存儲發(fā)現(xiàn)容器中已有該指針,說明此時已經(jīng)到了環(huán)形鏈表入口。
  2. 快慢雙指針法。如下圖所示,快指針以慢指針兩倍的速度前進,當他們第一次相遇時,慢指針走了X+Y,快指針走了2*(X+Y),其中AB為X,BC為Y,那CB順指針的距離就是2*(X+Y)-X-2*Y=X,此時將快指針放到頭節(jié)點A處,讓它們以相同速度前進,到B時正好相遇,也就是入口結點。

測試代碼:

解法一:哈希Set

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        unordered_set<ListNode*> S;
        while(pHead)
        {
            if(S.find(pHead)= = S.end())
            {
                S.insert(pHead);
                pHead = pHead->next;
            }
            else{
                return pHead;
            }
        }
        return nullptr;
    }
};

解法二:快慢雙指針?

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        // 空指針返回
        if(pHead == nullptr) 
            return nullptr;
        
        // 定義雙指針
        ListNode* slow = pHead;
        ListNode* fast = pHead;
        
        // 當能形成閉路時,while才會無限循環(huán)直到break
        while(fast != nullptr && fast->next != nullptr)
        {
            // 快指針以兩倍速度前進
            fast = fast->next->next;
            slow = slow->next;
            if(slow == fast)
                break;
        }
        
        // 若指向空指針,說明沒有形成閉路
        if(fast == nullptr || fast->next == nullptr)
            return nullptr;
        
        // 將快指針指向頭
        fast = pHead;
        
        // 當他倆相遇時,就是環(huán)形鏈表入口處
        while(fast != slow)
        {
            fast = fast->next;
            slow = slow->next;
        }
        
        return fast;
    }
};

到此這篇關于如何通過C++求出鏈表中環(huán)的入口結點的文章就介紹到這了,更多相關C++ 鏈表中環(huán)的入口結點內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • c語言處理函數(shù)調用的方法

    c語言處理函數(shù)調用的方法

    函數(shù)就是一段封裝好的,可以重復使用的代碼,它使得我們的程序更加模塊化,不需要編寫大量重復的代碼。這篇文章主要介紹了c語言是如何處理函數(shù)調用的?需要的朋友可以參考下
    2021-11-11
  • C++11-20 常量表達式的使用

    C++11-20 常量表達式的使用

    本文主要介紹了C++11-20常量表達式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C語言實現(xiàn)隨機發(fā)牌

    C語言實現(xiàn)隨機發(fā)牌

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)隨機發(fā)牌,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C?語言注釋和變量使用基礎詳解

    C?語言注釋和變量使用基礎詳解

    這篇文章主要為大家介紹了C語言注釋和變量使用示例基礎詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • C語言中查找字符在字符串中出現(xiàn)的位置的方法

    C語言中查找字符在字符串中出現(xiàn)的位置的方法

    這篇文章主要介紹了C語言中查找字符在字符串中出現(xiàn)的位置的方法,分別是strchr()函數(shù)和strrchr()函數(shù)的使用,需要的朋友可以參考下
    2015-08-08
  • 完美解決QT?QGraphicsView提升到QChartView報錯的問題

    完美解決QT?QGraphicsView提升到QChartView報錯的問題

    使用QT提供的QChartView來繪制圖表,提升QGraphicsView控件繼承QChartView后,然后將QGraphicsView提升到我們自己寫的類,怎么才能確保提升后編譯不報錯呢,下面小編給大家?guī)砹薗T QGraphicsView 提升到QChartView報錯解決方案,感興趣的朋友一起看看吧
    2023-05-05
  • C++實現(xiàn)LeetCode(97.交織相錯的字符串)

    C++實現(xiàn)LeetCode(97.交織相錯的字符串)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(97.交織相錯的字符串),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-07-07
  • C++可執(zhí)行文件絕對路徑值與VS安全檢查詳解

    C++可執(zhí)行文件絕對路徑值與VS安全檢查詳解

    這篇文章主要給大家介紹了關于C++可執(zhí)行文件絕對路徑值與VS安全檢查的相關資料,文中通過圖文以及實例代碼介紹的非常詳細,對大家學習或者使用C++具有一定的參考學習價值,需要的朋友可以參考下
    2023-01-01
  • Linux下如何使用C++獲取硬件信息

    Linux下如何使用C++獲取硬件信息

    這篇文章主要為大家詳細介紹了如何使用C++實現(xiàn)獲取CPU,主板,磁盤,BIOS信息等硬件信息,文中的示例代碼講解詳細,感興趣的小伙伴可以了解下
    2025-04-04
  • C++ 程序員為什么看不起php程序員

    C++ 程序員為什么看不起php程序員

    由于當今市場狀況,各種培訓班飛起,PHPer越來越多,學習成本很低。導致了很多人對PHP的誤解。其實PHP學到深入的時候,所需知識很多,并不是表面看到的那樣。另外,PHP確實嚴謹性不高,這個跟C++,java確實都沒法比。但是,PHP在web開發(fā)中的效率,是其他語言所不能比的
    2017-02-02

最新評論

泗洪县| 屯昌县| 固原市| 饶河县| 疏附县| 黄陵县| 乡城县| 兴宁市| 浦城县| 菏泽市| 龙海市| 兴和县| 泗阳县| 股票| 溧水县| 抚松县| 民县| 民乐县| 饶平县| 隆回县| 自治县| 高尔夫| 茌平县| 兴城市| 荔浦县| 宝坻区| 襄垣县| 泗洪县| 政和县| 共和县| 洛宁县| 金塔县| 朝阳区| 大兴区| 子洲县| 桐城市| 榆社县| 民县| 乳山市| 当雄县| 长顺县|