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

链表中环的入口结点

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-03 16:22
点赞 评论 收藏
分享
那一天的Java_J...:他本来公司就是做这个的,不就是正常的游戏客户端和服务器开发,软硬件联动,有啥恶心不恶心的,提前告诉你就是怕你接受不了,接受不了就没必要再往后走流程浪费时间,虽然这公司是一坨。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-01 11:47
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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