本題中建立鍊錶的結點數為5,接下來我們先扣一下遞迴是什麼:
鍊錶的遞迴實則是使用每呼叫一次函式就會出現乙個形參,當函式使用結束後形參會自動釋放這一特點
在本題中,將h指標最初指在null即鍊錶尾部,每次使用函式creatlink建立乙個結點
把陣列的值賦給這個結點,然後判定陣列的值是否完全進入鍊錶中,判定條件為陣列長度是否變為0
當長度為0時,從最後一次被呼叫的函式開始逐層返回
例如當最後一次呼叫(第五次呼叫時),乙個形參指標指在了null上,此時應該執行 # return h #這條語句,語句中的h是第四次呼叫時產生的形參h.
此處做特殊解釋,因為第五次產生的h是在第四次呼叫該函式產生的,所以返回值應給是返回第四次呼叫的函式裡,這裡用creatlink4來表示
作圖來分析一下
(**此處申明:creatlink=creatlink0=creatlink1=creatlink2=creatlink3=creatlink4=creatlink5**)
creatlink(int a,int n)
}接下來實現的是掛鏈環節,從第五次呼叫的形參依次給出函式的返回值
因為第五次是n==0成立,在第四次呼叫時,此時產生的第五個h=null,且沒有執行creatlink5中的h->next=creatlink(a+1,n-1)這條語句所以直接返回到上一級;
而此時在creatlink4中的接到來自creatlink5的返回值,將第五個h的位址賦給第四個h->next,之後依次向前推即可
#include #include typedef struct nodeelemsn;
elemsn *creatlink(int a,int n)
return h;
}void printlink(elemsn *h)
}void main(void)
; head=creatlink(a,5);
printf("\t\t鍊錶為:");
printlink(head);
printf("\n");
}
鍊錶的建立 輸出 非遞迴反轉 遞迴反轉
鍊錶的建立 輸出 非遞迴反轉 遞迴反轉 如下 include include include include include include include include include include include include using namespace std const int m...
鍊錶的建立 輸出 逆序
include include typedef struct taglistnodelistnode,list void printlist list head list reverselist list head int main printlist head 輸出原始鍊錶 head revers...
鍊錶與陣列的遞迴
鍊錶的遞迴 設head指向乙個非空單向鍊錶 例一 正向輸出鍊錶資料域的值 void printlink elemsn head 例二 逆向輸出單項鍊表資料域的值 void printlink elemsn head 例三 返回單向鍊錶節點的個數 int countnode elemsn head 例...