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

链表中环的入口结点

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

先判断有没有环,若有,设置两个指针,一个指向链表起点,一个指向相遇点,同时开始移动,相遇点即为环的入口节点

class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        ListNode* meetNode = HasLoop(pHead);  //先判断有没有环
        if(!meetNode) return nullptr;         //没有环,返回空
        while(pHead != meetNode){			  //两个指针,一个指向链表起点,一个指向相遇点,同时开始移动,相遇点即为环的入口节点
            pHead = pHead->next;
            meetNode = meetNode->next;
        }
        return pHead;
    }
    
    //用快慢指针判断是否有环,若有,则返回相遇点
    ListNode* HasLoop(ListNode* pHead){
        if(!pHead) return pHead;
        ListNode* fast = pHead;
        ListNode* slow = pHead;
        while(fast && slow){
            slow = slow->next;
            if(!fast->next)
                return nullptr;
            fast = fast->next->next;
            if(slow == fast)
                return slow;
        }
        return nullptr;
    }
};
全部评论

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务