填空题 下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun()的功能是:
删除链表中数据域值相同的结点,使之只保留一个。
请在标号处填入正确的内容,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构。
试题程序

#include <stdio.h>
#include <stdlib.h>
#define N 8
typedef struct list
{ int data;
struct list *next;
} SLIST;
void fun(SLIST *h)
{ SLIST *p, *q;
p=h->next;
if(p!=NULL)
{ q=p->next;
while(q!=NULL)
{ if(p->data==q->data)
{ p->next=q->next;
free(______);
q=p->______;
}
else
{ p=q;
q=q->______;
}
}
}
}
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]={1,2,2,3,4,4,4,5};
head=creatlist(a);
printf("/nThe list before deleting:/n");
outlist(head);
fun(head);
printf("/nThe list after deleting:/n");
outlist(head);
}
  • 1、
【正确答案】 1、q next next    
【答案解析】