NowCoder 剑指Offer_编程题 链表中环的入口节点

来源:互联网 发布:淘宝宝贝尺寸 编辑:程序博客网 时间:2024/06/18 11:31

NowCoder 链表中环的入口节点


Description

一个链表中包含环,请找出该链表的环的入口结点。

解题思路

两个指针p,q从表头出发遍历链表,p每次走一步,q每次走两步。如果链表中有环,那么p,q最终会相遇。设p走了x步,q则走了2x,设环的长度为n,表头到环的入口节点距离为k。那么会有等式2x-x=n,即x=n,即p走过的路程为环的长度。设p此时走了环的距离为d(从入口节点开始算),那么就有k+d=x=n,所以p距离入口节点的距离为k,等于链表表头到环的入口节点的距离。那么此时q从表头出发,p从当前位置出发,两者每次走一步,相遇的节点就是入口节点。

代码

个人github代码链接

/*struct ListNode {    int val;    struct ListNode *next;    ListNode(int x) :        val(x), next(NULL) {    }};*/class Solution {public:    ListNode* EntryNodeOfLoop(ListNode* pHead)    {        if(pHead == NULL || pHead->next == NULL)            return NULL;        ListNode *p, *q;        p = q = pHead;        while(p && q->next){            p = p->next;            q = q->next->next;            if(p == q)                break;        }        q = pHead;        while(p != q){            p = p->next;            q = q->next;        }        return p;    }};
0 0
原创粉丝点击