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

链表中环的入口结点

https://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) {
	  //如果头节点或头节点下一个为空返回空
        if(pHead==nullptr||pHead->next==nullptr){
            return nullptr;
        }
	  //创建快慢指针让它们在头结点的位置
        ListNode* fast=pHead;
        ListNode* slow=pHead;
        //让快指针走两步慢指针走一步
        while(fast!=nullptr&&fast->next!=nullptr){
             fast=(fast->next)->next;
        slow=slow->next;
		  //当快慢指针相遇跳出循环
         if(fast==slow){
                break;
            }
        }
	  //判断是否有环
        if(fast==nullptr||fast->next==nullptr){
            return nullptr;
        }
	  //把快指针放回头节点
        fast=pHead;
	  //当快慢指针又相遇时出循环
        while(fast!=slow){
            fast=fast->next;
            slow=slow->next; 
        }
	  //此时快慢指针即为入环节点
        return slow;
    }
};

全部评论

相关推荐

半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 17:30
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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