阅读以下说明和 C 代码,填补代码中的空缺,将解答填入答题纸的对应栏内。
【说明】 函数 GetListElemPtr(LinkList L,int i)的功能是查找含头结点单链表的第i个元素。若找到,则返回指向该结点的指针,否则返回空指针。 函数DelListElem(LinkList L,int i,ElemType *e) 的功能是删除含头结点单链表的第 i个元素结点,若成功则返回 SUCCESS ,并由参数e 带回被删除元素的值,否则返回ERROR 。 例如,某含头结点单链表 L 如图 (a) 所示,删除第 3 个元素结点后的单链表如图 4-1 (b) 所示。
#define SUCCESS 0
#define ERROR -1
typedef int Status;
typedef int ElemType;
链表的结点类型定义如下:
typedef struct Node{
ElemType data; struct Node *next;
}Node,*LinkList;
[C代码]
LinkList GetListElemPtr(LinkList L,int i)
{ /*L是含头结点的单链表的头指针,在该单链表中查找第i个元素结点; 若找到,则返回该元素结点的指针,否则返回NULL */
LinkList p;
int k; /*用于元素结点计数*/
if(i<1 || !L || !L->next) return NULL;
k=1; p=L->next; /*令p指向第1个元素所在结点*/
while(p && _(1_){ /*查找第i个元素所在结点*/
(2) ; ++k;
}
return p; }
Status DelListElem(LinkList L,int i,ElemType *e)
{ /*在含头结点的单链表L中,删除第i个元素,并由e带回其值*/
LinkList p,q;
/*令P指向第i个元素的前驱结点*/
if(i==1) (3);
else
p=GetListElemPtr(L,i-1);
if(!P || !p->next) return ERROR; /*不存在第i个元素*/
q=(4); /*令q指向待删除的结点*/
p->next=q->next; //从链表中删除结点*/
(5); /*通过参数e带回被删除结点的数据*/
free(q);
return SUCCESS;
}


