typedef struct ListNode Node;

Node* MeetingNode(Node* head)
{
	int i;
	Node *node_f, *node_s;

	if (!head||!(head->next))
		return NULL;

	node_s = head->next;
	node_f = head->next;

	while (node_f && node_s)
	{
        node_s = node_s->next;

		node_f = node_f->next;
		if (node_f)
			node_f = node_f->next;
		if (node_f == node_s)
			return node_f;

		
	}

	return NULL;

}

struct ListNode* EntryNodeOfLoop(struct ListNode* pHead ) {
    int count = 1;
	int i = 0;
	Node* Meetingnode = MeetingNode(pHead);
	Node* node_1 = Meetingnode;
	Node* node_2 = pHead;
	if (Meetingnode == NULL)
		return NULL;
	while (node_1->next != Meetingnode)
	{
		node_1 = node_1->next;
		count++;
	}
	node_1 = pHead;
	for (i = 0; i < count; i++)
		node_1 = node_1->next;
	
	while (node_1 != node_2)
	{
		node_1 = node_1->next;
		node_2 = node_2->next;
	}
	return node_1;

}