给定程序中已建立一个带有头结点的单向链表,在main函数中将多次调用fun函数,每调用一次fun函数,输出链表尾部结点中的数据,并释放该结点,使链表缩短。
请在程序的下划线处填入正确的内容,使程序得出正确的结果。
不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list
{
int data;
struct list *next;
} SLIST;
void fun(SLIST *p)
{
SLIST *t, *s;
t=p->next; s=p;
while(t->next != NULL)
{
s=t;
/**********found**********/
t=t->__(1)__;
}
/**********found**********/
printf(" %d ",__(2)__);
s->next=NULL;
/**********found**********/
free(__(3)__);
}
SLIST *creatlist(int *a)
{
SLIST *h,*p,*q; int i;
h=p=(SLIST *)malloc(sizeof(SLIST));
for(i=0; i<N; i++)
{
q=(SLIST *)malloc(sizeof(SLIST));
q->data=a[i];
p->next=q;
p=q;
}
p->next=0;
return h;
}
void outlist(SLIST *h)
{
SLIST *p;
p=h->next;
if (p==NULL)
{
printf("\nThe list is NULL!\n");
}
else
{
printf("\nHead");
do
{
printf("->%d" ,p->data);
p=p->next;
}
while(p!=NULL);
printf("->End\n");
}
}
main()
{
SLIST *head;
int a[N]={11,12,15,18,19,22,25,29};
head=creatlist(a);
printf("\nOutput from head:\n");
outlist(head);
printf("\nOutput from tail:\n");
while (head->next != NULL)
{
fun(head);
printf("\n\n");
printf("\nOutput from head again :\n");
outlist(head);
}
system("pause");
}