環形鍊錶i
題目描述:
給定乙個鍊錶,判斷鍊錶中是否有環。
為了表示給定鍊錶中的環,我們使用整數 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)(即,常量)記憶體解決此問題嗎?
解題思路:雙指標法。乙個快指標,乙個慢指標。快指標一次走兩步,慢指標一次走一步。若有環,快指標一定會追趕上慢指標。若無環,快指標最先走至鍊錶末尾。
**實現:
public boolean hascycle(listnode head)
} return false;
}
環形鍊錶ii題目描述:給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。 如果鍊錶無環,則返回 null。
為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置(索引從 0 開始)。 如果 pos 是 -1,則在該鍊錶中沒有環。
說明:不允許修改給定的鍊錶。
示例 1:
輸入:head = [3,2,0,-4], pos = 1
輸出:tail connects to node index 1
解釋:鍊錶中有乙個環,其尾部連線到第二個節點。
示例 2:
輸入:head = [1,2], pos = 0
輸出:tail connects to node index 0
解釋:鍊錶中有乙個環,其尾部連線到第乙個節點。
示例 3:
輸入:head = [1], pos = -1
輸出:no cycle
解釋:鍊錶中沒有環。
高階:你是否可以不用額外空間解決此題?
解題思路:
這裡借用另一篇部落格的乙個圖以及解題思路。
這張圖什麼意思呢?假設快指標和慢指標在c點相遇了。則快指標走過的路程為(x+y+z+y),而慢指標走過的路程為(x+y)。由於快指標走過的路程是慢指標走過路程的2倍,則有以下等式:
x+y+z+y = 2(x+y),化簡得到:x=z
所以,將任意乙個指標放置c點,另乙個指標放置原點a,並且設定兩個指標的遍歷速度相同,則兩指標相遇的結點即為開始入環的第乙個結點。
沿用上一題的解題思路。先用快慢指標判斷是否有環的存在。若不存在,直接返回空;若存在,則使用上述方法找到入口結點。
**實現:
public listnode detectcycle(listnode head)
listnode x = hascycle(head);
if (x == null) else
return p;}}
//此方法判斷有無環。若有環,返回快慢指標相交結點,若無環,返回空
public listnode hascycle(listnode head)
} return null;
}
鍊錶 環形鍊錶 II
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。說明 不允許修改給定的鍊錶。高階 你是否可以不用額外空間解決此題?definition for singly linked list.class listnode public class solution start p1 ...
環形鍊錶 II
給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回 null。為了表示給定鍊錶中的環,我們使用整數 pos 來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果 pos 是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 輸出...
環形鍊錶II
1.問題描述 給定乙個鍊錶,返回鍊錶開始入環的第乙個節點。如果鍊錶無環,則返回null。為了表示給定鍊錶中的環,我們使用整數pos來表示鍊錶尾連線到鍊錶中的位置 索引從 0 開始 如果pos是 1,則在該鍊錶中沒有環。說明 不允許修改給定的鍊錶。示例 1 輸入 head 3,2,0,4 pos 1 ...