給定乙個鍊錶,判斷鍊錶中是否有環。
為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:true
解釋:鍊錶中有乙個環,其尾部連線到第二個節點。
示例 2:
輸入:head = [1,2], pos = 0
輸出:true
解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。
示例 3:
輸入:head = [1], pos = -1
輸出:false
解釋:鍊錶中沒有環。
高階:你能用 o(1)(即,常量)記憶體解決此問題嗎?
判斷是否有環,可以採用乙個快指標和乙個慢指標,開啟的時候在同乙個起點,鍊錶中存在環則必定有乙個時刻快指標會等於慢指標。
這就好比2個人在環形操場上跑步,起點相同,乙個跑的快,乙個跑的慢,跑的快的遲早會追上跑的慢的。
bool
hascycle
(listnode *head)
}return
false
;}
方法:
當快指標與慢指標第一次相遇的時候,開始計數,每次加一,第二次相遇的時候,則返回計數值,即為有環鏈表的長度。
public
intlooplength
(listnode head)
if(flag )
if(flag && time==2)
}return0;
}
方法:
在環中,快指標與慢指標第一次相遇的點,到環的起始點的距離和頭結點到環的起始點的距離是一樣的。
public listnode findloopbegin
(listnode head)
return slow;}}
return null;
//無環
}
初級演算法 鍊錶 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...
Leetcode 初級演算法 鍊錶6 環形鍊錶
給定乙個鍊錶,判斷鍊錶中是否有環。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。示例 1 輸入 head 3,2,0,4 pos 1 輸出 true 解釋 鍊錶中有乙個環,其尾部連線到第二個節點。示例 2 輸...
leetcode初級演算法 鍊錶
題目源自leetcode,方法都是自 cai 己 ji 寫的,可能比較符合菜雞們的思路 鍊錶是做到現在,感覺自己最拉垮的一節,資料結構真的都還給老師了 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點。傳入函式的唯一引數為 要被刪除的節點 示例 1 輸入 head 4,5,1,9 node...