所属年份:2012.3;
下列给定程序是建立一个带头结点的单向链表,并用随机函数为各结点赋值。函数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 *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) { NODE *p; p=h->next; printf("\n\n The LIST :\n\n HEAD"); 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)判断结束后指针指向下一个结点。