问答题 给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构!1 #include<stdio.h>2 #include<stdlib.h>3 #define N 84 typedef struct list5 { int data;6 struct list *next;7 } SLIST;8 void fun(SLIST *p)9 { SLIST *t,*s;10 t=p->next;s=p;11 while(t->next!=NULL)12 { s=t;13 /**********found**********/14 t=t->__1__;15 }16 /**********found**********/17 printf(''%d'',__2___ );18 s->next=NULL;19 /**********found**********/20 free( __3__ );21 }22 SLIST *creatlist(int *a)23 {SLIST *h,*p,*q;int i;24 h=p(SLIST*)malloc(sizeof(SLIST));25 for(i=0;i<N;i++)26 {q=(SLIST *)malloc(sizeof(SLIST));27 q->data=a[i];p->next=q;p=q;28 }29 p->next=0;30 return h;31 }32 void outlist(SLIST *h)33 {SLIST *p;34 p=h->next;35 if (p==NULL)printf(''\nThe list is NULL!\n'');36 else37 { printf(''\nHead'');38 do { printf(''->%d'',p->data);p=p->next;} while(p!=NULL);39 printf(''->End\n'');40 }41 }42 main()43 { SLIST *head;44 int a[N]={11,12,15,18,19,22,25,29};45 head=creatlist(a);46 printf(''\nOutput from head:\n'');outlist(head);47 printf(''\nOutput from tail:\n'');48 while(head->next!=NULL){49 fun(head);50 printf(''\n\n'');51 printf(''\nOutput from head again:\n'');outlist(head);52 }53 }
【正确答案】正确答案:(1)next (2)t->data (3)t
【答案解析】解析:第一空:fun函数中的循环目的是找到尾结点“while(t->next!=NULL)”,利用结点变量s和t,s指向当前节点,t不断指向下一个结点,因此第一空处应该是“t=t->next;”。第二空:这里是输出尾结点中的数据,已经利用循环找到了尾结点t,t的数据是t->data,因此第二空处应该为“printf(''%d'',t->data);”。第三空:输出尾结点数据之后删除尾结点,使用free,又因为尾结点是t,因此第三空处应该为“free(t);”。