到表头 */
if((cp == NULL) || (x < cp->data)){
newP- >next = cp;
*hl = newP;
return;
}
/* 顺序查找出x结点的插入位置 */
while(cp != NULL){
if(x < cp->data){
break;
}else{
ap = cp;
cp = cp- >next;
}
}
/* 把x结点插入到ap和cp之间 */
newP- >next = cp;
ap- >next = newP;
return;
}
/* 13.从单链表中删除表头结点,并把该结点的值返回,若删除失败则停止
程序运行 */
elemType deleteFirstList(struct sNode* *hl)
{
elemType temp;
struct sNode *p = *hl; /* 暂存表头结点指针,以便回收 */
if(*hl == NULL){
printf( "单链表为空,无表头可进行删除,退出运行! ");
exit(1);
}
*hl = (*hl)- >next; /* 使表头指针指向第二个结点 */
temp = p- >data; /* 暂存原表头元素,以便返回 */
free(p); /* 回收被删除的表头结点 */
return temp; /* 返回第一个结点的值 */
}
/* 14.从单链表中删除表尾结点并返回它的值,若删除失败则停止
程序运行 */
elemType deleteLastList(struct sNode* *hl)
{
elemType temp;
/* 初始化cp和ap指针,使cp指向表头结点,使ap为空 */
struct sNode *cp = *hl;
struct sNode *ap = NULL;
/* 单链表为空则停止运行 */
if(cp == NULL){
printf( "单链表为空,无表头进行删