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

admin2021-02-25  27

问题 下列给定程序中已建立了一个带头结点的单向链表,链表中的各结点按数据域递增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之只保留一个。
    请在下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。
    注意:不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<stdio.h>
#define N 8
typedef struct lisl
{int data;
  struct list*next:
}SLIST:
void fun(SLlST*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(}ead);
  fun(head);
  printf("The list after deleting:\n");
  outlist(head);
}

选项

答案(1)q (2)next (3)next

解析 本题考查:释放内存空间函数free();链表结点的基本操作。
填空l:使用free函数,释放q所指的内存空间,其一般格式为:free(指针变量)。
填空2和填空3:删除链表中符合条件结点后,指针要指向下一个结点。
转载请注明原文地址:https://kaotiyun.com/show/Umtp777K
0

最新回复(0)