问答题 给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表, 并为各结点数据域赋0到m-1的值。 请改正函数Creatlink中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include typedef struct aa { int data; struct aa *next; } NODE; NODE *Creatlink(int n, int m) { NODE *h=NULL, *p, *s; int i; p=(NODE )malloc(sizeof(NODE)); h=p; p->next=NULL; for(i=1; i<=n; i++) { s=(NODE *)malloc(sizeof(NODE)); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; } return p; } outlink(NODE *h) { NODE *p; p=h->next; printf("/n/nTHE LIST :/n/n HEAD "); while(p) { printf("->%d ",p->data); p=p->next; } printf("/n"); } main() { NODE *head; head=Creatlink(8,22); outlink(head); }
【正确答案】
【答案解析】第一处: 指向刚分配的结构指针,所以应改为:p=(NODE *)malloc(sizeof(NODE)); 第二处: 在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为返回h。