您好,登錄后才能下訂單哦!
給定一個鏈表,判斷鏈表中是否有環(huán)。
為了表示給定鏈表中的環(huán),我們使用整數(shù) pos 來表示鏈表尾連接到鏈表中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鏈表中沒有環(huán)。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鏈表中有一個環(huán),其尾部連接到第二個節(jié)點(diǎn)。
示例 2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:鏈表中有一個環(huán),其尾部連接到第一個節(jié)點(diǎn)。
示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:鏈表中沒有環(huán)。
進(jìn)階:
你能用 O(1)(即,常量)內(nèi)存解決此問題嗎?
來源:力扣(LeetCode)
鏈接:
https://leetcode-cn.com/problems/linked-list-cycle
/*
解題思路:
解法一、雙指針法
1、設(shè)置一個快指針fast:一次走兩步
2、設(shè)置一個慢指針slow:一次走一步
3、如果存在環(huán)鏈表,則fast和slow會重合
4、否則不存在環(huán)鏈表
*/
解法一、雙指針法
/*
title: 算法141. 環(huán)形鏈表
author: xidoublestar
method: 雙指針法
type: C
date: 2020-5-25
*/
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
bool hasCycle(struct ListNode* head) {
if (head == NULL)
return false;
struct ListNode* fast = head->next, * slow = head;
while (fast && fast->next) {
fast = fast->next->next;
slow = slow->next;
if (fast == slow)
return true;
}
return false;
}
解法一、雙指針法
時間復(fù)雜度:O(n)
空間復(fù)雜度:O(1)
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。