一、若煉表為雙向鍊錶。
就像一根不均勻的香找出中間位置,從兩頭開始燒。同理,設定乙個頭指標,乙個尾指標,頭指標往後移動,尾指標往前移動。移動到什麼時候是中間位置呢?這就要分兩種情況了:
(1)鍊錶長度是偶數,此時中間位置是,頭指標、尾指標分別指向對方,則中間位置就是頭尾指標了。
(2)鍊錶長度是奇數,此時投尾指標指向相同,中間位置也就是指向相同的節點。
二、若鍊錶不是雙向鍊錶(單向鍊錶)。
此時思路類似於o(n)求解鍊錶的倒數k節點,就是使用快慢指標,慢指標指向鍊錶開頭,快指標指向慢指標後第k節點(如果鍊錶長度有大於k的節點數),如果快指標沒到鍊錶尾節點,快慢指標都後移乙個節點,當快指標到尾節點,此時慢指標指向倒數k的節點。
所以,以此類推,單向鍊錶的中間節點的求法就是:慢指標每次移動乙個節點,快指標每次移動兩個節點(當然,慢指標移動2個節點,快指標移動4個節點可行嗎?),此時,又分為以下兩種情況:
(1)鍊錶長度是偶數,快指標下乙個節點為null,此時慢指標指向節點以及下乙個節點為中間節點。
(2)鍊錶長度是奇數,快指標指向null,此時中間結點就是慢指標指向的節點(慢指標先移動,快指標後移動)。
鍊錶的中間節點 移除鍊錶元素
鍊錶的中間節點給定乙個帶有頭結點 head 的非空單鏈表,返回鍊錶的中間結點。如果有兩個中間結點,則返回第二個中間結點。示例 1 輸入 1,2,3,4,5 輸出 此列表中的結點 3 序列化形式 3,4,5 返回的結點值為 3 測評系統對該結點序列化表述是 3,4,5 注意,我們返回了乙個 listn...
20200711 取鍊錶中間的元素
在xbox程式中有乙個redeem a code,意思為 輸入啟用碼 1 找到單向鍊錶中間那個元素,如果有兩個,則取前面的乙個。思路 掃瞄一遍得出長度,取出中間位置。typedef struct node node p為指向單鏈表的第乙個節點 node findmiddleelement node ...
演算法(常用) 快速找到鍊錶的中間節點
思路 利用快慢指標思想,快指標每次走兩步,慢指標走一步。當快指標走到底的時候,滿指標指向的就是鍊錶的中間節點。需要注意的是,當鍊表長度為偶數字的時候,則慢指標指向的是中間偏右的節點,奇數的時候,指向的是中間節點。if head null head.next null return true list...