问答题 下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数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; /******found******/ free(【1】); /******found******/ q=p一>【2】; }else {p=q; /******found******/ q=q一>【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("The 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("The list before deleting:\n"); outlist(head); fun(head); printf("The list after deleting:n"); outlist(head); }
【正确答案】正确答案: (1)q (2)next (3)next
【答案解析】解析:本题考查:释放内存空间函数free();链表结点的基本操作。 填空1:使用free函数,释放q所指的内存空间,其一般格式为:free(指针变量)。 填空2和填空3:删除链表中符合条件结点后,指针要指向下一个结点。