leetcode-環形鏈表2-18

題目要求
  給定一個鏈表,判斷鏈表中是否有環。如果鏈表中有某個節點,可以通過連續跟蹤 next 指針再次到達,則鏈表中存在環。 如果鏈表中存在環,則返回入環的結點 。 否則,返回NULL。
思路
  設置快慢指針,快指針一次走兩步,慢指針一次走一步,如果有環,快慢指針同時進環後,快指針會追上慢指針,他們的地址會相等,然後,從快慢指針相遇處和鏈表的頭結點處,分別出發兩個指針,均走一步,兩個指針會在入環處相遇,返回該結點即可。
圖解
在這裏插入圖片描述
代碼實現





struct ListNode *detectCycle(struct ListNode *head) {
	struct ListNode * fast = head;
	struct ListNode * slow = head;
	while (fast && fast->next)
	{
		fast = fast->next->next;
		slow = slow->next;
		if (fast == slow)
		{
			struct ListNode* slowHead = head;
			while (slow != slowHead)
			{
				slow = slow->next;
				slowHead = slowHead->next;
			}
			return slow;
		}
	}

	return NULL;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章