1. 程式人生 > >博客第二天——頭插法建立單鏈表

博客第二天——頭插法建立單鏈表

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。滿分。

  明日將奉上尾插法實現單鏈表。

博客第二天——頭插法建立單鏈表