问答题 下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数fun的功能是将单向链表结点(不包括头结点)数据域为偶数的值累加起来,并且作为函数值返回。请改正函数fun中的错误,使它能得出正确的结果。注意:部分源程序在文件MODI1.C中,不要改动main函数,不得增行或删行,也不得更改程序的结构!试题程序:#include<stdio.h>#include<conio.h>#include<stdlib.h>typedef struct aa{ int data; struct aa *next; }NODE;int fun(NODE * h){ int sum=0; NODE *P; P=h->next;/*********found*********/ while(P->next) {if(P->data%2==0) sum+=p->data;/*********found*********/ P=h->next; } return sum;}NODE*treatlink(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) {NODE*P; P=h->next; printf("\n\n The LIST:\n\nHEAD"); while(p) {printf("->%d“,P->data); P=P->next;} printf("\n");}void main(){ NODE*head; int sum; system("CLS"); head=creatlink(10); outlink(head); sum=fun(head); printf("\nsum=%d",sum);}
【正确答案】正确答案:(1)while(p!=NULL) (2)p=p->next;
【答案解析】解析:(1)判断当前指针p指向的结点是否存在,若存在则对该结点数据域进行判断操作。 (2)判断结束后指针指向下一个结点。