给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 NULL

题目:
在这里插入图片描述
分析
返回入环的第一个节点之前我们要判断是否成环,判断方法如下
在这里插入图片描述
判断了是否成环之后怎么找到成环的第一个节点呢,分析如下
在这里插入图片描述
代码






/**
 * 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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章