給定一個鏈表,返回鏈表開始入環的第一個節點。 若是鏈表無環,則返回 NULL

題目:
在這裏插入圖片描述
分析
返回入環的第一個節點以前咱們要判斷是否成環,判斷方法以下
在這裏插入圖片描述
判斷了是否成環以後怎麼找到成環的第一個節點呢,分析以下
在這裏插入圖片描述
代碼






code

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode *detectCycle(struct ListNode *head) {
    //先判斷是否是環,若是是找出第一次相遇的位置
    if(head==NULL||head->next==NULL)
    return NULL;//成環最少兩個
    struct ListNode *slow=head;
    struct ListNode *fast=head;
    while(fast)
    {
        slow=slow->next;
        if(fast->next==NULL)//防止越界
        return NULL;
        fast=fast->next->next;
         if(slow==fast)//重合了
        break;
    }
    if(fast==NULL)
    return fast;
    //此時獲得第一次相遇的位置
    struct ListNode *dst=head;//從原點開始出發
    while(1)
    {
        if(dst==slow)//找到了,返回
        return dst;
        dst=dst->next;
        slow=slow->next;
    }
}
相關文章
相關標籤/搜索