问题 问答题

给定程序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。

单项选择题
单项选择题 A1/A2型题