以前覺得遞迴太麻煩,指標方便多了,於是乎單鏈表的題目都是用迭代呀,雙指標呀來做的。這次突破下自己,將單鏈表的遞迴掰扯一下,等下會用乙個簡單的小題目來作為例子;
我先講一下平常遞迴的流程,方便待會單鏈表遞迴的理解;
題目:輸入乙個數字 n=123,列印出1,2,3;
**:
void print(n)
執行流程圖:
鍊錶遞迴其實也是一樣的,都是形成函式的棧楨,然後釋放棧楨;
題目:題目鏈結
定義乙個函式,輸入乙個鍊錶的頭節點,反轉該鍊錶並輸出反轉後鍊錶的頭節點。
示例:
輸入: 1->2->3->4->5->null
輸出: 5->4->3->2->1->null
先上**
struct listnode* reverselist(struct listnode* head)
**解析:
單鏈表的遞迴實現
可以將單鏈表看成是遞迴定義的,每個結點的next域指向由後諸結點組成的一條子單鏈表,最後乙個結點的next域指向空鍊錶。此時可以將單鏈表寫成遞迴演算法。1 構造空鍊錶 public class linkedrecursion 2 根據陣列構造單鏈表 根據指定陣列構造鍊錶 public linkedr...
C 遞迴單鏈表插入
在單鏈表的頭結點之前插入乙個新的節點,使之成為乙個從新節點開始的完整鍊錶。所以這個演算法的時間複雜度為o1 int headinsert node 特別強調這裡有個引用 head,int data 在鍊錶的尾部插入乙個節點使之成為乙個從原有頭結點到新生成節點為尾的鍊錶 如果單鏈表只儲存了head結點...
理解遞迴反轉單鏈表
n個月前我玩過一次反轉鍊錶,大概有兩種方法,一種是while迴圈遍歷,另外一種是遞迴,今天帶大家理解一下遞迴的實現邏輯 遞迴實現反轉鍊錶,其實就是系統幫我們壓棧的過程每遞迴一次,指向不同的下乙個節點 大致的流程就是上圖所示 下面來理解上圖這個邏輯 話不多說上 class listnode overr...