题解 | #链表中环的入口结点#

链表中环的入口结点

http://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4

使用快慢指针解决问题。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        /*-----------------*/
        /*判断pHead是否为空*/
        /*-----------------*/
        if(pHead==nullptr)return nullptr;
 
        /*----------------*/
        /*   创建快慢指针  */
        /*----------------*/
        ListNode* fast=pHead,*slow=pHead;
 
        /*----------------------------------*/
        /*判断fast和fast->next是否遇到链表尾*/
        /*-----------------------------------*/
        while(fast && fast->next){
            /*-------------------------*/
            /*慢指针走一步,快指针走两步*/
            /*-------------------------*/
            slow=slow->next;
            fast=fast->next->next; 
            /*--------------------*/
            /*判断快慢指针是否相遇*/
            /*--------------------*/
            if(fast==slow){
                slow=pHead;
                /*--------------------------------------*/
                /*当head和meet相遇,说明遇到环的起始位置*/
                /*--------------------------------------*/
                while(slow!=fast){
                   slow=slow->next;
                   fast=fast->next;
                }
                return slow;
            }
        }
        return nullptr;
    }
};
全部评论

相关推荐

头像
11-21 11:39
四川大学 Java
是红鸢啊:忘了还没结束,还有字节的5k 违约金
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务