填空题

给定程序中已建立一个带有头结点的单向链表,在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");

}

赣ICP备20007335号-2