欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C語言刷題判斷鏈表中是否有環(huán)題解

 更新時間:2023年07月26日 10:42:38   作者:吳尼瑪  
這篇文章主要為大家介紹了C語言刷題判斷鏈表中是否有環(huán)題解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

題目

判斷給定的鏈表中是否有環(huán)。如果有環(huán)則返回true,否則返回false。

數(shù)據(jù)范圍:鏈表長度 0≤n≤10000,鏈表中任意節(jié)點的值滿足 ∣val∣<=100000
要求:空間復雜度 O(1),時間復雜度 O(n)

輸入分為兩部分,第一部分為鏈表,第二部分代表是否有環(huán),然后將組成的head頭結(jié)點傳入到函數(shù)里面。-1代表無環(huán),其它的數(shù)字代表有環(huán),這些參數(shù)解釋僅僅是為了方便讀者自測調(diào)試。實際在編程時讀入的是鏈表的頭節(jié)點。

例如輸入{3,2,0,-4},1時,對應(yīng)的鏈表結(jié)構(gòu)如下圖所示:

可以看出環(huán)的入口結(jié)點為從頭結(jié)點開始的第1個結(jié)點(注:頭結(jié)點為第0個結(jié)點),所以輸出true。

示例1

輸入:
{3,2,0,-4},1
返回值:
true
說明:
第一部分{3,2,0,-4}代表一個鏈表,第二部分的1表示,-4到位置1(注:頭結(jié)點為位置0),即-4->2存在一個鏈接,組成傳入的head為一個帶環(huán)的鏈表,返回true

示例2

輸入:
{1},-1
返回值:
false
說明:
第一部分{1}代表一個鏈表,-1代表無環(huán),組成傳入head為一個無環(huán)的單鏈表,返回false

示例3

輸入:
{-1,-7,7,-4,19,6,-9,-5,-2,-5},6
返回值:
true

思路1

使用兩個指針,fast 與 slow。
它們起始都位于鏈表的頭部。隨后,slow 指針每次向后移動一個位置,而fast 指針向后移動兩個位置。如果鏈表中存在環(huán),則 fast 指針最終將再次與 slow 指針在環(huán)中相遇。

知識點:雙指針

雙指針指的是在遍歷對象的過程中,不是普通的使用單個指針進行訪問,而是使用兩個指針(特殊情況甚至可以多個),兩個指針或是同方向訪問兩個鏈表、或是同方向訪問一個鏈表(快慢指針)、或是相反方向掃描(對撞指針),從而達到我們需要的目的。

解答代碼1

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if (head == nullptr) {
            return false;
        }
        // 定義快慢指針
        auto slow = head;
        auto fast = head;
        // 循環(huán)退出條件為快指針先到鏈表尾部
        while (fast != nullptr && fast->next != nullptr) {
            slow = slow->next;
            fast = fast->next->next;
            if (slow == fast) {
                // 快慢指針相遇表示有環(huán)
                return true;
            }
        }
        return false;
    }
};

思路2

遍歷鏈表中的每個節(jié)點,并將它記錄下來;一旦遇到了此前遍歷過的節(jié)點,就可以判定鏈表中存在環(huán),需借助哈希表(C++中std::unordered_set)。

但這種解法的空間復雜度為O(N),其中 N 為鏈表中節(jié)點的數(shù)目。因為需要將鏈表中的每個節(jié)點都保存在哈希表當中。

解答代碼2

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
#include <unordered_set>
class Solution {
public:
    bool hasCycle(ListNode *head) {
        if (head == nullptr) {
            return false;
        }
        auto cur = head;
        std::unordered_set<ListNode *> sets;
        while (cur != nullptr) {
            if (sets.find(cur) != sets.end()) {
                // 在unordered_set中找到了,表示有環(huán)
                return true;
            } else
                sets.emplace(cur);
            cur = cur->next;
        }

以上就是C語言刷題判斷鏈表中是否有環(huán)題解的詳細內(nèi)容,更多關(guān)于C語言判斷鏈表是否有環(huán)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt利用QJson實現(xiàn)解析數(shù)組的示例詳解

    Qt利用QJson實現(xiàn)解析數(shù)組的示例詳解

    這篇文章主要為大家詳細介紹了Qt如何利用QJson實現(xiàn)解析數(shù)組功能,文中的示例代碼講解詳細,對我們學習Qt有一定幫助,需要的小伙伴可以了解一下
    2022-10-10
  • C++動態(tài)內(nèi)存管理詳解

    C++動態(tài)內(nèi)存管理詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++動態(tài)分配內(nèi)存的介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • 使用Matlab制作大富翁小游戲的過程詳解

    使用Matlab制作大富翁小游戲的過程詳解

    大富翁大家都玩過,走到建筑的位置可以買地,第二圈走到買過的地可以升級,別人經(jīng)過后需要付過路費,每次經(jīng)過起點都會獲得一定資金,玩到最后還沒破產(chǎn)的就是勝者,本文將制作一個Matlab版的大富翁小游戲,需要的可以參考一下
    2022-02-02
  • C語言指針類型與野指針引起的原因

    C語言指針類型與野指針引起的原因

    我們C語言獨一無二的特色——指針。說起指針,可能很多人都是還沒學就已經(jīng)聽說過其鼎鼎大名,因為有很多傳言和玩笑什么的說指針很難,其實大家大可不必有畏難情緒,指針這個東西雖然確實有一定難度,但是這是基于其優(yōu)秀的靈活性而衍生的一點小問題
    2023-02-02
  • 淺談使用Rapidxml 庫遇到的問題和分析過程(分享)

    淺談使用Rapidxml 庫遇到的問題和分析過程(分享)

    下面小編就為大家?guī)硪黄獪\談使用Rapidxml 庫遇到的問題和分析過程(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • C++內(nèi)存模型與名稱空間概念講解

    C++內(nèi)存模型與名稱空間概念講解

    這篇文章主要介紹了C++內(nèi)存模型與名稱空間,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
    2023-01-01
  • C++實現(xiàn)動態(tài)線性表

    C++實現(xiàn)動態(tài)線性表

    這篇文章主要為大家詳細介紹了C++實現(xiàn)動態(tài)線性表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • C++ 實戰(zhàn)開發(fā)一個猜單詞的小游戲

    C++ 實戰(zhàn)開發(fā)一個猜單詞的小游戲

    眾所周知紙上得來終覺淺,我們要在實戰(zhàn)中才能真正的掌握技術(shù),小編為大家?guī)硪环萦肅++編寫的猜單詞小游戲,給大家練練手,快來看看吧
    2021-11-11
  • QT實現(xiàn)貪吃蛇游戲代碼詳解

    QT實現(xiàn)貪吃蛇游戲代碼詳解

    本文主要為大家詳細介紹了在QT中實現(xiàn)貪吃蛇游戲的詳細教程,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • C語言實現(xiàn)的一個萬年歷小程序

    C語言實現(xiàn)的一個萬年歷小程序

    這篇文章主要介紹了C語言實現(xiàn)的一個萬年歷小程序,具有一定的參考價值,做C語言日期計算的朋友可以參考下
    2014-07-07

最新評論