一步一步寫演算法(之鍊錶逆轉)

2021-06-28 02:39:36 字數 765 閱讀 5987

鍊錶逆轉是面試環境中經常遇到的一道題目,也是我們在實際開發中可能會遇到的開發需求。和線性逆轉不一樣,單向鍊錶的節點需要乙個乙個進行處理。為了顯示兩者之間的區別,我們分別對線性記憶體和鍊錶進行逆**

(1)普通連續記憶體資料的反轉分析

[cpp]view plain

copy

status normal_revert(

intarray, 

intlength)    

我們看到連續記憶體反轉函式主要做了下面幾個工作:

1)分配和原來資料一樣大的記憶體

2)從原來資料末尾開始拷貝 

3)利用pdata獲取的資料對原來的資料進行拷貝覆蓋,釋放記憶體

(2)鍊錶資料的反轉

[cpp]view plain

copy

status link_revert(node** pnode)  

return

true;  

}  

和連續記憶體不同,鍊錶節點的反轉需要進行下面一些操作:

1) 判斷指標是否為空,判斷指標的指標是否為空

2) 將指標分成兩個部分,乙個是已經反轉成功的鍊錶,即pnode;另外乙個是待反轉的鍊錶,即pprevnode

3) 對2)進行迴圈迭代處理,直到所有的節點都已經接受反轉

建議大家可以好好觀察一下兩者之間的區別。

一步一步寫演算法(之鍊錶逆轉)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!鍊錶逆轉是面試環境中經常遇到的一道題目,也是我們在實際開發中可能會遇到的開發需求。和線性逆轉不一樣,單向鍊錶的節點需要乙個乙個進行處理。為了顯示兩者之間的區別,我們分別對線性記憶體和鍊錶進行逆 1 普通連續記憶體資料的反轉分析 status nor...

一步一步寫演算法(之鍊錶排序)

相比較線性表的排序而言,鍊錶排序的內容稍微麻煩一點。一方面,你要考慮資料插入的步驟 另外一方面你也要對指標有所顧慮。要是有一步的內容錯了,那麼作業系統會馬上給你彈出乙個exception。就鍊錶的特殊性而言,適合於鍊錶的排序有哪些呢?1 插入排序 適合 2 氣泡排序 適合 3 希爾排序 適合 4 選...

一步一步寫演算法(之鍊錶重合)

鍊錶重合是乙個好玩的問題。原題目是這樣的 有兩個鍊錶,那麼如何判斷這兩個鍊錶是不是重合的?至於這個鍊錶在什麼時候重合的,這不重要,關鍵是判斷這個鍊錶究竟有沒有重合。究竟有什麼方法呢?最簡單的方法就是檢視兩者有沒有共同點。那麼依次判斷就行了。int find node in link link nod...