除,退出运行! ");
exit(1);
}
/* 从单链表中查找表尾结点,循环结束时cp指向表尾结点,ap指向其前驱结点 */
while(cp- >next != NULL){
ap = cp;
cp = cp- >next;
}
/* 若单链表中只有一个结点,则需要修改表头指针 */
if(ap == NULL){
*hl = (*hl)- >next; /* 或改为*hl = NULL; */
}
/* 删除表尾结点 */
else{
ap- >next = NULL;
}
/* 暂存表尾元素,以便返回 */
temp = cp- >data;
free(cp); /* 回收被删除的表尾结点 */
return temp; /* 返回表尾结点的值 */
}
/* 15.从单链表中删除第pos个结点并返回它的值,若删除失败则停止
程序运行 */
elemType deletePosList(struct sNode* *hl, int pos)
{
int i = 0;
elemType temp;
/* 初始化cp和ap指针,使cp指向表头结点,使ap为空 */
struct sNode *cp = *hl;
struct sNode *ap = NULL;
/* 单链表为空或pos值非法则停止运行 */
if((cp == NULL) || (pos <= 0)){
printf( "单链表为空或pos值不正确,退出运行! ");
exit(1);
}
/* 从单链表中查找第pos个结点,找到后由cp指向该结点,由ap指向其前驱结点 */
while(cp != NULL){
i++;
if(i == pos){
break;
}
ap = cp;
cp = cp- >next;
}
/* 单链表中没有第pos个结点 */
if(cp == NULL){
printf( "pos值不正确,退出运行! ");