前一段日子收到cisco的面試,被問到乙個問題,對乙個單鏈表進行逆置,題目很簡單,最近對遞迴有了一些新的認識,寫下一些感想。
當你拿到乙個可以用遞迴解決的問題時,別馬上下手寫程式,基本上這樣都會失敗,你需要停下來思考一下如何用數學表示式也形式化的寫出
遞迴定義。
比如斐波那契數列,遞迴的數學表示式如下:
f(0)=1
f(1)=1
f(n)=f(n-1)+f(n-2)
有了如上的遞迴表示式,寫遞迴就會很簡單。
鍊錶逆置也一樣,如 1->2->3->4->5->null,
f(5)= return //返回逆置的煉表頭結點
f(其他) = <- //f(1)注意有所改變
**如下:
node* reverse(node* p)
return prev;
}完美~~
鍊錶的逆置(迭代法與逆置法)
鍊錶翻轉操作的順序對於迭代來說是從鏈頭往鏈尾,而對於遞迴是從鏈尾往鏈頭。1 非遞迴 迭代 方式 node reverselist node h return newh 原文 原文 實現如下 看了博主的 後,大致了解迭代的方法,但由於自己c語言指標的欠缺,讀起來還是有點費力。現在注釋乙個小問題 p q...
鍊錶的逆置
5.鍊錶的逆置 已知head指向乙個帶頭節點的單向鍊錶,鍊錶中每個結點包含資料域和指標域。用鍊錶實現該鍊錶的逆置,並輸出。例如 輸入 5 整數表示要輸入的字元個數 abcde 輸出 edcba 注意 不允許通過改變每個節點的資料域來實現效果,必須改變鍊錶連線順序發生逆置。我寫的 如下 include...
鍊錶的逆置
剛剛除錯出來,趁熱寫一下。輸入多個整數,以 1作為結束標誌,順序建立乙個帶頭結點的單鏈表,之後對該單鏈表的資料進行逆置,並輸出逆置後的單鏈表資料。input 輸入多個整數,以 1作為結束標誌。output 輸出逆置後的單鏈表資料。sample input 12 56 4 6 55 15 33 62 ...