閱讀以下說(shuō)明和 C 代碼,填補(bǔ)代碼中的空缺,將解答填入答題紙的對(duì)應(yīng)欄內(nèi)。
【說(shuō)明】
函數(shù) GetListElemPtr(LinkList L,int i)的功能是查找含頭結(jié)點(diǎn)單鏈表的第i個(gè)元素。若找到,則返回指向該結(jié)點(diǎn)的指針,否則返回空指針。
函數(shù)DelListElem(LinkList L,int i,ElemType *e) 的功能是刪除含頭結(jié)點(diǎn)單鏈表的第 i個(gè)元素結(jié)點(diǎn),若成功則返回 SUCCESS ,并由參數(shù)e 帶回被刪除元素的值,否則返回ERROR 。
例如,某含頭結(jié)點(diǎn)單鏈表 L 如圖 4-1 (a) 所示,刪除第 3 個(gè)元素結(jié)點(diǎn)后的單鏈表如 圖 4-1 (b) 所示。
#define SUCCESS 0
#define ERROR -1
typedef int Status;
typedef int ElemType;
鏈表的結(jié)點(diǎn)類型定義如下:
typedef struct Node{
ElemType data;
struct Node *next;
}Node ,*LinkList;
【C 代碼】
LinkList GetListElemPtr(LinkList L ,int i)
{ /* L是含頭結(jié)點(diǎn)的單鏈表的頭指針,在該單鏈表中查找第i個(gè)元素結(jié)點(diǎn):
若找到,則返回該元素結(jié)點(diǎn)的指針,否則返回NULL
*/
LinkList p;
int k; /*用于元素結(jié)點(diǎn)計(jì)數(shù)*/
if (i<1 ∣∣ !L ∣∣ !L->next) return NULL;
k = 1; P = L->next; / *令p指向第1個(gè)元素所在結(jié)點(diǎn)*/
while (p && (1) ) { /*查找第i個(gè)元素所在結(jié)點(diǎn)*/
(2) ; ++k;
}
return p;
}
Status DelListElem(LinkList L ,int i ,ElemType *e)
{ /*在含頭結(jié)點(diǎn)的單鏈表L中,刪除第i個(gè)元素,并由e帶回其值*/
LinkList p,q;
/*令p指向第i個(gè)元素的前驅(qū)結(jié)點(diǎn)*/
if (i==1)
(3) ;
else
p = GetListElemPtr(L ,i-1);
if (!p ∣∣ !p->next) return ERROR; /*不存在第i個(gè)元素*/
q = (4) ; /*令q指向待刪除的結(jié)點(diǎn)*/
p->next = q->next; /*從鏈表中刪除結(jié)點(diǎn)*/
(5) ; /*通過(guò)參數(shù)e帶回被刪除結(jié)點(diǎn)的數(shù)據(jù)*/
free(q);
return SUCCESS;
}