1. 程式人生 > >142. Linked List Cycle II(連結串列)

142. Linked List Cycle II(連結串列)

https://leetcode.com/problems/linked-list-cycle-ii/description/

題目:如果連結串列有環,返回環的入口,負責返回NULL.

思路:快慢指標,考慮下面的連結串列環,其中4->2表示4的下一元素為2。

1->2->3->4->2ft           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; } };