今天在写线性表的链式存储过程中,遇到了一个比较奇葩的问题,就是同一段程序,用for循环可以顺利执行,然而用while循环就提醒我“结点空间申请失败!!!”,考虑了一上午都没有头绪。记录下这个问题,日后继续探究。
下面是用for循环实现单链表的创建
//尾插法创建带头结点的单链表 ListNode *CreatListL(int n,DataType *x) { ListNode *head,*p1,*p2; int i ; head = (ListNode *)malloc(sizeof(ListNode)); if(head == NULL){ printf("结点空间申请失败!!! "); return NULL; } p1 = head; for(i = 0;i < n;i++){ p2 =(ListNode *)malloc(sizeof(ListNode)); if(p2 == NULL){ printf("结点空间申请失败!!! "); 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("结点空间申请失败!!! "); 9 return NULL; 10 } 11 p1 = head; 12 while(i < n){ 13 p2 =(ListNode *)malloc(sizeof(ListNode)); 14 if(p2 == NULL){ 15 printf("结点空间申请失败!!! "); 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 }