阅读以下说明和C函数,将应填入______处的语句或语句成分写在对应栏内。
[说明]
已知单链表L含有头节点,且节点中的元素值以递增的方式排列。下面的函数DeleteList在L中查找所有值大于minK且小于maxK的元素,若找到,则逐个删除,同时释放被删节点的空间。若链表中不存在满足条件的元素,则返回-1,否则返回0。
例如,某单链表如图1所示。若令minK为20,maxK为50,则删除后的链表如图2所示。
链表节点类型定义如下:
typedef Struct Node
int data;
struct Node*next;
Node,*LinkList;
[C函数]
int DeleteList(LinkListL,int minx,int maxK)
/*在含头节点的单链表L中删除大于minx且小于maxK的元素*/
______*q=L,*p=L->next;/*p指向第一个元素节点*/
int deiTag=0;
while(p)
if(p->data<=minK)
iq=p;p=______;
else
if(p->data<maxK=/*找到删除满足条件的节点*/
q->next=______free(p);
p=______;delTag=1;
else break;
if(______)return-1;
return 0;
参考答案:delTag==0
解析:序的目的是删除链表中大于20和小丁50的数。首先p,q是首次出现,必须先定义,所以第一空中应填“Node*p,*q”。节点p,q中,q指向所删节点的前驱,p指向所删节点。如果,p所指节点的数据大于minK,则p,q点同时后移,即第二空填“p->next”。如果p所指节点的数据同时又小于maxK,则删除该节点。q直接连接p后面的节点,即第三空填“p->next”。当节点删除完成后,p依然指向q的后面节点,因此第四空填“q->next”。题中要求若链表中不存在满足条件的元素,则返回-1。delTag是时候对链表进行删除的标志。因此如果链表不存在满足条件的元素,delTag为0,因此,第五空中应填“delTag==0”。