1. 程式人生 > >for循環與while循環

for循環與while循環

尾插 pan head 鏈表的創建 div tno 然而 col 過程

今天在寫線性表的鏈式存儲過程中,遇到了一個比較奇葩的問題,就是同一段程序,用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循環