下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。 请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得

admin2018-01-13  5

问题    下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数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;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:删除链表中符合条件结点后,指针要指向下一个结点。
转载请注明原文地址:https://jikaoti.com/ti/39kiFFFM
0

相关试题推荐
随机试题
最新回复(0)