跳至主要內容

leetcode 141. 环形链表 (判断链表是否有环)

张威小于 1 分钟数据结构与算法链表双指针

leetcode 141. 环形链表 (判断链表是否有环)open in new window

判断链表是否包含环属于经典问题了,解决方案也是用

每当慢指针 slow 前进一步,快指针 fast 就前进两步。如果 fast 最终遇到空指针,说明链表中没有环;如果 fast 最终和 slow 相遇,那肯定是 fast 超过了 slow 一圈(相对静止),说明链表中含有环。

bool hasCycle(ListNode* head) {
    // 初始化快慢指针,指向头结点
	ListNode* fast = head;
	ListNode* slow = head;
    // 快指针到尾部时停止
	while(fast && fast->next) {
        // 慢指针走一步,快指针走两步
		fast = fast->next->next;
		slow = slow->next;
        // 快慢指针相遇,说明含有环
        if(fast ==  slow) {
			return ture;
		}
	}
	 // 不包含环
	return false;
}