基于快慢指针链表求环

快慢指针可以在O(1)的常数内存空间里完成链表环形判断,时间复杂度是O(n)。思路大概是 慢指针每次前进一步,快指针前进两步,党慢指针走完环形一圈时,快指针刚好走完两圈,两个指针相遇,则判断有环。

#include<stdio.h>

struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

class Solution {
public:
	bool hasCycle(ListNode *head) {
		if (head == NULL)
			return false;
		ListNode *slow = head, *fast = head;
		if (head->next == NULL || head->next->next == NULL)
			return false;
		slow = head->next;
		fast = head->next->next;
		while (slow != fast) {
			if (slow->next == NULL || fast->next == NULL || fast->next->next == NULL)
				return false;
			slow = slow->next;
			fast = fast->next->next;
		}
		return true;
	}
};
发布了170 篇原创文章 · 获赞 69 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/qq951127336/article/details/89706401
今日推荐