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

链表中环的入口结点

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

相关推荐

不愿透露姓名的神秘牛友
07-10 14:10
啊啊啊啊好幸福,妈妈是我找工作发疯前的一束光
榕城小榕树:你是我见过最幸福的牛客男孩
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务