leetcode_142環形連結串列II
阿新 • • 發佈:2021-11-13
一、題目
二、分析
這個題目很有意思,最開始我也沒有想到很好的解法,但是發現題目使用的雙指標方法很有效,就是利用快慢指標的方法去判斷是否存在環,如果存在則使用其判斷具體位置,這個和刪除倒數第幾個節點的那道題目很類似。
具體題目可以看這個分析:
三、程式碼
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class縱一葦之所如,臨萬頃之茫然。Solution { public: ListNode *detectCycle(ListNode *head) { if(head == NULL || head->next == NULL ) return NULL; //檢測是否有環 ListNode* fast=head; ListNode* slow=head; while(fast!=NULL && fast->next!=NULL){ fast= fast->next->next; slow= slow->next; if(fast==slow)break; } //如果為空,則說明無環 if(fast==NULL || fast->next==NULL){ return NULL; } //如果有環,則開始尋找環的位置 fast=head; while(fast != slow){ fast = fast->next; slow = slow->next; }return slow; } };