链表中环的入口结点
题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
思路:
利用快慢指针,先循环找到快慢指针值相等的位置;再将慢指针重置到头部,和快指针一起移动,但这次快慢指针都每次只移动一个位置。
代码如下:
/* 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 * p, * q; p=pHead,q=pHead; while(q!=NULL&&q->next!=NULL) { p=p->next; q=q->next->next; if(p==q) break; } if(q==NULL||q->next==NULL) return NULL; p=pHead; while(p!=q) { p=p->next; q=q->next; } return p; } };