剑指offer 链表中环的入口位置
题目描述
一个链表中包含环,请找出该链表的环的入口结点。
思路:这题需要知道a = c,然后head和slow每次走一步,相遇的时候就是第一个入口交点,
注意:for循环或者while循环之后,一定要判断是是否正常退出,是找到满足条件的break退出,还是不满足for循环条件退出,加一个判断。
/* 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; //find fast = slow 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; } if(fast == slow){//这里一定要判断是否是正常退出 return slow; } return nullptr; } };