问题 填空题

给定程序MODI1.C中函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0~(m-1)的值。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
文件MODI1.C内容如下:
#include<stdio.h>
#include<stdlib.h>
typedef struet aa
int data;
struct aa *next;
NODE;
NODE *Creatlink(int m)
NODE *h=NULL,*p,*s;
int i;
/**********found**********/
P=(NODE)malloc(sizeof(NODE));
h=p;
p->next=NULL;
for(i=0;i<m;i++)
s=(NODE *)malloc(sizeof(NODE));
s->data=i:
s->next=p->next;
p->next=s;
p=p->next;

/**********found**********/
return p;

void 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");

void main()
NODE *head;
head=Creatlink(8);
outlink(head);

答案

参考答案:第1处:将“p=(NODE)malloc(sizeof(NODE));”改为“p=(NODE *)malloc(sizeof(NODE));”。
第2处:将“return p;”改为“return h;”。

解析: 函数Creatlink使用的算法是:循环m次,每次为一个新的结点在内存中划分相应的内存空间,将首地址赋给指针p,并将这个新结点接入链表的末尾。对于第1处错误,指针p是一个指向结构体的指针,所以对malloc函数的返回值进行强制类型转换时,必须用“(NODE*)”。对于第2处错误,任何一个链表都必须知道第一个结点地址,创建链表的函数应该将头结点的地址作为函数值返回。程序中头结点的地址存放在h中,而不在指针p中。

多项选择题
单项选择题