142. Linked List Cycle II(連結串列)
阿新 • • 發佈:2019-01-01
https://leetcode.com/problems/linked-list-cycle-ii/description/
題目:如果連結串列有環,返回環的入口,負責返回NULL.
思路:快慢指標,考慮下面的連結串列環,其中4->2表示4的下一元素為2。
1->2->3->4->2。
ft st flag
1 1 0
3 2 0
2 3 0
4 4 1
當flag為1時,ft與st指向同一元素:4
其中 ft 遍歷的路徑為:1->2->3->4->2->3->4,路徑長度為6
st 遍歷的路徑為: 1->2->3->4 路徑長度為3
ft的路徑長度剛好為st的兩倍,st回到head,繼續
ft st flag
4 1 1
2 2 1
其中 ft 遍歷的路徑為: 4->2, 路徑長度為1
st 遍歷的路徑為: 1->2 路徑長度為1
路徑長度相等,再次相遇即為入口地址。
class Solution {
public:
ListNode *detectCycle(ListNode *head) {
ListNode *ft = head, *st = head;
bool flag = 0;
while(ft&&ft->next){
st = st->next;
ft = (flag==1?ft->next:ft->next->next);
if (st==ft&&!flag)
st = head, flag = 1;
if(st==ft && flag)
return ft;
}
return NULL;
}
};