1. 程式人生 > 其它 >演算法基礎~連結串列~連結串列求環解法一,藉助set集合

演算法基礎~連結串列~連結串列求環解法一,藉助set集合

演算法基礎~連結串列~連結串列求環解法一,藉助set集合

1,成環的連結串列的圖解:

2,從圖解,我們得知,下個結點指向的結點先前已經遍歷過(存在過了)則成環,找到環的起點~ 解釋一下why使用到工具set集合?

because 要找到遍歷過的結點它身上沒有任何標誌,是需要從第一個結點開始迴圈遍歷到它身上的【所以選擇放到工具set集合,利用工具set封裝好的方法find 遍歷】

3,✿小小 心得:某個結點(身上沒有任何標誌),比較時又得從第一個結點開始迴圈,可以藉助前人寫好的好工具 set集合【封裝了刪改方法

所以到這裡就知道要使用set集合啦!

● 4,思路:【set 集合的元素就是把遍歷過的結點指標(地址)“裝”進去,然後每次移動到下個結點,

看它的next指標的指向是否指向已經遍歷過的結點(即已經“裝”到set中,可以通過遍歷set集合中的元素,

呼叫set的find 方法進行比較得知)】

5,上程式碼,解析思路看2、3、4

class Solution{
    public:
        ListNode *detectCycle(ListNode *head){
            std::set<ListNode*> node_set;
            while(head){
                if(node_set.find(head) != node_set.end()){
                    
return head; } node_set.insert(head); head = head->next; } return NULL; } }