單鏈表的翻轉

2021-07-22 08:35:14 字數 633 閱讀 3712

單鏈表的翻轉方式

大概有這幾種:

reverse1.新建乙個單鏈表把原鍊錶的內容逐個頭插法插入新煉表中.從而實現了鍊錶的翻轉.

reverse2.新建乙個陣列把原鍊錶的內容copy到陣列和新鍊錶中.從而實現了鍊錶的翻轉.

reverse3.一次遍歷單鏈表,原地將原鍊錶翻轉

評注:

reverse1 在實現的時候,也只是遍歷了一次原鍊錶,但是卻要新建立乙個鍊錶,來儲存原鍊錶的反轉內容,相當於原鍊錶的副本.雖然時間複雜度上為o(n),但卻浪費了空間,而且還有鍊錶的頭插入,帶來指標的移動額外的開支.

reverse2與reverse1 一樣在時間複雜度上為o(n),但是翻轉的內容是用node陣列儲存,這樣失去了鍊錶的實質,再者,鍊錶的長度本應是不固定的.所以要適應不同的鍊錶,陣列的長度使不能確定的.因此,要使用此方法需要明確知道單鏈表的長度.否則,在做反序輸出陣列時,可能造成陣列下標越界.

reverse3與前兩者相比,也是遍歷一次原鍊錶.但是它在遍歷的同時改變了原鍊錶的指標方向,是原鍊錶的節點改變成指向原來相反的地方.這樣做就達到了翻轉的目的.而且時間複雜度依然是o(n).且不需要另外開闢新的空間來存放新的鍊錶.這樣做的好處在不改變原鍊錶節點存放資料內容外,而且沒有對資料的操作,只是對指標的操作.避免了改寫原鍊錶存放的資料.

單鏈表翻轉

關於單鏈表的翻轉問題頗為困擾人。下面寫的程式只需遍歷每個節點一次,並且不需要構造輔助接點 通過new的方式 另外這個問題可以轉換為乙個迴圈鍊錶結構,很有意思。h struct node class cdatastruct cpp檔案 cdatastruct cdatastruct void cdat...

單鏈表翻轉

1,原理 使用p和q兩個指標配合工作,使得兩個節點間的指向反向,同時用r記錄剩下的鍊錶。p head q head next head next null 現在進入迴圈體,這是第一次迴圈。r q next q next p p q q r 第二次迴圈。r q next q next p p q q ...

單鏈表翻轉

相比之前的那個方法 206.reverse linked list 這個方法比較簡單,直接在鍊錶上面進行逆序 容易理解 此 是用於將帶頭結點的單鏈表進行逆序,思路 1.首先設p結點為第乙個有效結點 即頭結點的下乙個節點 q為p的下乙個節點,原因從後面可知。2.將所給節點從頭結點處斷開,然後讓p結點的...