for循環與while循環
阿新 • • 發佈:2018-10-27
尾插 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循環