所属年份: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; fun (NODE *h) { int max=-1; NODE *p; /*************found**************/ p=h; while(p) { if(p->data>max) max=p->data; /*************found**************/ p=h->next; } return max; } outresult(int s, FILE *pf) { fprintf(pf, "\nThe max in link :%d\n",s); } NODE *creatlink(int n, int m) { NODE *h,*p,*s; int i; h=p=(NODE *)malloc(sizeof(NODE)); h->data=9999; 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; } p->next=NULL; return h; } outlink(NODE *h,FILE *pf) { NODE *p; p=h->next; fprintf(pf, "\n The LIST :\n\n HEAD"); while(p) { fprintf(pf, "->%d",p->data); p=p->next; } fprintf(pf, "\n"); } main() { NODE *head; int m; system("CLS"); head=creatlink(12,100); outlink(head,stdout); m=fun(head); printf("\nThe RESULT :\n"); outresult(m,stdout); }
【参考答案】
(1)p=h->next; (2)p=p->next;
【解题思路】
(1)因为链表的头结点没有数据域,所以对指针p进行初始化时,要将p指向头结点的下一个结点。
(2)通过指针p的移动遍历链表,因此此处应改为p=p->next;。