標籤:線性表 問題 eof 儲存 頭結點 ++ div class creat
今天在寫線性表的鏈式預存程序中,遇到了一個比較奇葩的問題,就是同一段程式,用for迴圈可以順利執行,然而用while迴圈就提醒我“結點空間申請失敗!!!”,考慮了一上午都沒有頭緒。記錄下這個問題,日後繼續探究。
下面是用for迴圈實現單鏈表的建立
//尾插法建立帶頭結點的單鏈表ListNode *CreatListL(int n,DataType *x){ ListNode *head,*p1,*p2; int i ; head = (ListNode *)malloc(sizeof(ListNode)); if(head == NULL){ printf("結點空間申請失敗!!!\n"); return NULL; } p1 = head; for(i = 0;i < n;i++){ p2 =(ListNode *)malloc(sizeof(ListNode)); if(p2 == NULL){ printf("結點空間申請失敗!!!\n"); return NULL; } p2->data = *(x + i); p1->next = p2; p1 = p2; } p1->next = NULL; return head;}
下面是用while迴圈實現單鏈表的建立:
//尾插法建立帶頭結點的單鏈表 2 ListNode *CreatListL(int n,DataType *x) 3 { 4 ListNode *head,*p1,*p2; 5 int i = 0; 6 head = (ListNode *)malloc(sizeof(ListNode)); 7 if(head == NULL){ 8 printf("結點空間申請失敗!!!\n"); 9 return NULL;10 }11 p1 = head;12 while(i < n){13 p2 =(ListNode *)malloc(sizeof(ListNode));14 if(p2 == NULL){15 printf("結點空間申請失敗!!!\n");16 return NULL;17 }18 p2->data = *(x + i);19 p1->next = p2;20 p1 = p2;
i++;21 }22 p1->next = NULL;23 return head;24 }
for迴圈與while迴圈