练习:链表中环的入口节点
1、题目要求
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
2、我的代码
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};
*/
class Solution {
public:
ListNode* EntryNodeOfLoop(ListNode* pHead)
{
if(pHead == NULL) return NULL;
ListNode* p1 = pHead, * p2 = pHead;
do {
p1 = p1->next;
p2 = p2->next;
if(p2) p2 = p2->next;
} while(p1 && p2 && p1 != p2);
if(!p1 || !p2) return NULL;
int k = 0;
do {
p2 = p2->next;
k++;
}while(p1 != p2);
p1 = pHead, p2 = pHead;
for(int i = 0;i < k;i++) {
p2 = p2->next;
}
while(p1 && p2 && p1 != p2) {
p1 = p1->next;
p2 = p2->next;
}
return p1;
}
};