struct ListNode *detectCycle(struct ListNode *head) { struct ListNode* past; struct ListNode* current = head; int len, i; for (len = 0; current != NULL; len ++,current = current->next, past = head){ for (i = 0; i < len; i++, past = past->next){ if (current == past) return past; } } return NULL; }
解法2
解题思路
利用数学知识求解,运用快慢指针的方法,分别定义 fast 和 slow指针,从头结点出发,fast指针每次移动两个节点,slow指针每次移动一个节点,如果 fast 和 slow指针在途中相遇 ,说明这个链表有环。 若有环,从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点