问答题 给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。 请改正函数fun中指定部位的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! #include #include typedef struct aa { int data;struct aa*next;}NODE; int fun(NODE*h) { int sum=0; NODE*p; /**********found**********/ p=h; while(P) { if(P->data%2==0) sum+=p->data; /***********found**********/ p=h->next; } return sum; } NODE*creatlink(int n) {NODE*h,*p,*s; int i; h=p=(NODE*)malloc(sizeof(NODE)); for(i=1;i<:n;i++) {s=(NODE。)malloc(sizeof(NODE)); s->data=rand()%16; s->next=p->next; P->next=s; p=p->next; } P->next=NULL; return h; } outlink(NODE*h,FILE*pf) {NODE*p; p=h->next; fprintf(pf,”/n/nTHE LIST:/n/n HEAD”); while(P) { fprintf(pf,"->%d",p->data); p=p->next;) fprintf(pf,"/n"); } outresult(int s,FILE*pf) { fprintf(pf,”/nThe SLIm of even numbers : %d/n¨,s);} main() {NODE*head;int evirl; head=creatlink(12); head->data=,9 0 0 0; outlink(head,stdout); even=fun(head); printf("/nTh.e result:/n"); outresult(even, stdout); }
【正确答案】正确答案:(1)p=h->next; (2)p=p->next;
【答案解析】解析:(1)根据题干中求得除了头结点之外的结点数据域中的数据值,头指针h,工作指针p指向头结点的下一个结点,所以第一个标识下的“p=h;”指向头结点应该改为指向下一个结点“p=h->next;”。 (2)工作指针p,利用p实现对链表的遍历,p表示指向链表的当前结点,所以指向下一个结点应该是“p=p->next;”。