BM7 链表中环的入口结点
给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。
数据范围: 0<=n≤10000,1<=结点值<=10000
要求:空间复杂度 O(1),时间复杂度 O(n)
解法
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param pHead ListNode类
* @return ListNode类
*/
typedef struct ListNode* pnode;
static inline pnode hasCycle(struct ListNode* head ) {
// write code here
if(!head)return NULL;
pnode slow = head;
pnode fast = head;
while(fast->next&&fast->next->next)
{
slow = slow->next;
fast = fast->next->next;
if(fast==slow)return slow;
}
return NULL;
}
struct ListNode* EntryNodeOfLoop(struct ListNode* pHead ) {
// write code here
pnode p = hasCycle(pHead);
if(!p)return NULL;
while(p!=pHead)
{
p = p->next;
pHead = pHead->next;
}
return p ;
}