1. 程式人生 > 其它 >leetcode_142環形連結串列II

leetcode_142環形連結串列II

一、題目

二、分析

這個題目很有意思,最開始我也沒有想到很好的解法,但是發現題目使用的雙指標方法很有效,就是利用快慢指標的方法去判斷是否存在環,如果存在則使用其判斷具體位置,這個和刪除倒數第幾個節點的那道題目很類似。

具體題目可以看這個分析:

題目分析

三、程式碼

/**
 * 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; } };
縱一葦之所如,臨萬頃之茫然。