如何求中間位置的數 快慢指標

2021-08-18 18:11:14 字數 564 閱讀 7523

乙個陣列是有序陣列,則mid=(start+end)/2即是中間位置。

倘若是乙個有序鍊錶呢?

轉換為陣列?——陣列size怎麼確定。暫時設大點吧

第一次遍歷記錄size,第二次再到size/2位置

也許方法很多,但是今天可以通過快慢指標來完成:

快慢指標中的快慢指的是移動的步長,即每次向前移動速度的快慢。例如可以讓快指標每次沿鍊錶向前移動2,慢指標每次向前移動1次。

該方法在不借助計數器變數實現尋找中位數的功能。原理是:快指標的移動速度是慢指標移動速度的2倍,因此當快指標到達鍊錶尾時,慢指標到達中點。程式還要考慮鍊錶結點個數的奇偶數因素,當快指標移動x次後到達表尾(1+2x),說明鍊錶有奇數個結點,直接返回慢指標指向的資料即可。如果快指標是倒數第二個結點,說明鍊錶結點個數是偶數,這時可以根據「規則」返回上中位數或下中位數或(上中位數+下中位數)的一半。

while (fast&&slow)

}

具體地,可以拿leetcode 109題 練手。

具體可以參考下關於快慢指標的若干應用詳解.

LeetCode 876題 求鍊錶的中間位置

給定具有頭節點的非空單鏈表,返回鍊錶的中間節點。如果有兩個中間節點,則返回第二個中間節點。例如 輸入 1,2,3,4,5 輸出 此列表中的節點3 序列化 3,4,5 返回的節點的值為3.該節點的判斷序列化為 3,4,5 請注意,我們返回了乙個listnode物件ans,這樣 ans.val 3,an...

鍊錶的中間結點(快慢指標)

給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listnode 型別的...

面試題 求未知長度的鍊錶的中間節點(快慢指標)

所謂的快慢指標的快慢是指指標向前移動的步長。比如在單鏈表中,快指標每次向前移動2個步長,慢指標則每次向前移動1個步長。快速找出未知長度的鍊錶的中間節點,暴力解法就是先遍歷真個鍊錶,算出鍊錶的長度,再從頭遍歷長度的一半,即可找出,不過這個比較費時。更巧妙的辦法是運用快慢指標,將快慢指標先指向頭結點,快...