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