博客第二天——頭插法建立單鏈表
阿新 • • 發佈:2017-09-30
n) span -s str list clas cto 今天 cnblogs
今天是第二天,今天遇到一個題:本題要求實現一個函數,求單鏈表L
結點的階乘和。這裏默認所有結點的值非負,且題目保證結果在int
範圍內。
首先考慮這個題目本身不難,鑒於本人剛學習數據結構,題目中已給代碼的單鏈表的創建值得我考慮。題目中給的是頭插法代碼如下:分析一下這段代碼
int N, i; List L, p; scanf("%d", &N); L = NULL; for ( i=0; i<N; i++ ) { p = (List)malloc(sizeof(struct Node)); scanf("%d", &p->Data); p->Next = L; L = p; }
首先是建立一個空單鏈表,接著輸入N個數作為單鏈表的長度。for循環裏面,創建一個p空間,輸入數據,將L賦給P的Next域,接著L的地址替換為輸入的P,完成單鏈表第一個元素的建立,第二個是同理,將新建立的結構體P的Next域付給L (使P指向上一個L),這時將P付給L,L->next也指向了上一個L;之後以此類推完成N個元素的單鏈表創建。該方法就是頭插法建立單鏈表。
既然都說到這了,那也來看看我做的題。代碼如下:
1 int FactorialSum(List L){2 int sum=0; 3 int mul=1; 4 int i; 5 while(L != NULL){ 6 for(i=1;i<= L->Data;i++) 7 { 8 mul *= i; 9 } 10 sum+=mul; 11 mul=1; 12 L=L->Next; 13 } 14 return sum; 15 }
逐次訪問單鏈表L,直至單鏈表為空。for循環將1到L->的值依次相乘,完成階乘操作。執行完一次L,將mul加給sum, 同時也是關鍵的地方每次循環將mul置1.
最後便是返回sum。滿分。
明日將奉上尾插法實現單鏈表。
博客第二天——頭插法建立單鏈表