如何尋找單鏈表的中間結點?這裡介紹兩種方法。
該方法的思路為:
(1)先求解單鏈表的長度 length;
(2)然後遍歷 length/2 的距離即可查詢到單鏈表的中間結點。
具體實現:
public node findmidele(node head)
return tmp;
}
該方法的缺點:需要遍歷兩次鍊錶,即第一次遍歷求解單鏈表的長度,第二次遍歷根據索引獲取中間結點。
如果是雙鏈表。可以首尾並行,利用兩個指標乙個從頭到尾遍歷,乙個從尾到頭遍歷,當兩個指標相遇時,就找到了中間元素。以此思想為基礎,如果是單鏈表,也可以採用雙指標的方式來實現中間結點的快速查詢。
該方法的思想為:
第一步,有兩個指標同時從頭開始遍歷;
第二步,乙個快指標一次走兩步,乙個慢指標一次走一步;
第三步,快指標先到鍊錶尾部,而慢指標則恰好到達鍊錶中部。
具體實現**如下:
public node searchmid(node head)
return q;
}
快指標到鍊錶尾部時,慢指標指向的結點和慢指標指向結點的下乙個結點都是鍊錶的中間結點。 快速尋找單鏈表中間元素結點
忘記什麼時候做的筆試題了。記憶力差沒辦法。一看到這倒題目,下意識的想到的解決方案便是首先迴圈遍歷鍊錶獲得鍊錶長度len,然後再次迴圈遍歷鍊錶查詢len 2處的中間節點。在這種情況下,其時間複雜度由兩次迴圈決定 o l l 2 o 3l 2 儘管這種思路也能解決問題,但也許存在更好的方法。上次我們談到...
尋找單鏈表的中間節點
思路 1 首先求解單鏈表的長度length,然後遍歷 length 2 的距離即可查到單鏈表的中間節點,但一般此種方法需要遍歷兩次鍊錶,第一次遍歷求解單鏈表的長度,第二次遍歷根據索引獲取中間節點。2 如果是雙向鍊錶,可以首尾並行,利用兩個指標乙個從頭到尾,乙個從尾到頭,當兩個指標相遇的時候,就找到中...
單鏈表操作之查詢中間結點
查詢鍊錶的中間結點 自定義的結點結構體和頭指標結構體 include include include includetypedef int datatype typedef struct linknode linknode,plinknode 結點結構體 typedef struct linklis...