exit(1);
}
/* 若pos等于1,则需要删除表头结点 */
if(pos == 1){
*hl = (*hl)- >next; /* 或改为*hl = cp->next; */
}
/* 否则删除非表头结点,此时cp指向该结点,ap指向前驱结点 */
else{
ap- >next = cp->next;
}
/* 暂存第pos个结点的值,以便返回 */
temp = cp- >data;
free(cp); /* 回收被删除的第pos个结点 */
return temp; /* 返回在temp中暂存的第pos个结点的值 */
}
/* 16.从单链表中删除值为x的第一个结点,若删除成功则返回1,否则返回0 */
int deleteValueList(struct sNode* *hl, elemType x)
{
/* 初始化cp和ap指针,使cp指向表头结点,使ap为空 */
struct sNode *cp = *hl;
struct sNode *ap = NULL;
/* 从单链表中查找值为x的结点,找到后由cp指向该结点,由ap指向其前驱结点 */
while(cp != NULL){
if(cp- >data == x){
break;
}
ap = cp;
cp = cp- >next;
}
/* 若查找失败,即该单链表中不存在值为x的结点,则返回0 */
if(cp == NULL){
return 0;
}
/* 如果删除的是表头或非表头结点则分别进行处理 */
if(ap == NULL){
*hl = (*hl)- >next; /* 或改为*hl= cp->next */
}else{
ap- >next = cp->next;
}
free(cp); /* 回收被删除的结点 */
return 1; /* 返回1表示删除成功 */
}
/************************************************************************/
int main(int argc, char* argv)
{
int&