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

链表中环的入口结点

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;
    }
};
全部评论

相关推荐

有没有经济学家能告诉我,三年后中国的就业市场会不会好转?我在校招中拿到了一份9k+的offer,还是行业的龙头企业,心里其实不想再考研了。但又总是担心,万一读研后薪资更高,我会不会后悔呢?
Fyhyuky:三年后肯定不会啊,只会比现在更烂,你自己看看现在有没有什么增长点,电车都是国家补贴兜底才发展出来的,已经比较违背市场自然规律了,互联网更不用说了,国家强力打压,传统制造业转型失败,现在苟延残喘中
点赞 评论 收藏
分享
10-30 10:16
南京大学 Java
龚至诚:给南大✌️跪了
点赞 评论 收藏
分享
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务