M076

02-程序修改题 软件154 范金瑞 1002浏览

所属年份:2010.9;2011.9

下列给定程序中函数Creatlink的功能是:创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。

请改正函数Creatlink中指定部位的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!

#include <stdio.h>
#include <stdlib.h>
typedef  struct  aa
{
    int  data;
    struct  aa  *next;
} NODE;
NODE *Creatlink(int  n, int  m)
{
    NODE  *h=NULL, *p, *s;
    int  i;
    /**********found***********/
    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;
    }
    /**********found***********/
    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);
}

【参考答案】

(1)p=(NODE *)malloc(sizeof(NODE));
(2)return  h;

【考点分析】
本题考查:变量赋初值;for循环语句;函数返回值。

【解题思路】
(1)由变量定义可知p为指向结点的指针。指向刚分配的结构指针,所以应改为p=(NODE *)malloc(sizeof(NODE))。
(2)在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置,最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为return h。