/*****************************************************/
/* 在双链表中值为y的结点后插入一个值为x的新结点 */
/* 文件名dlnkinyx.c,函数名insert_x_after_y() */
/*****************************************************/
dnode *insert_x_after_y(dnode *head,datatype x,datatype y)
{
dnode *p,*q;
q=find_num_dlink_list(head,y);/*查找值为y的结点*/
if(!q)/*没有找到,则不做插入操作*/
{printf("\n找不到值为%d的结点,无法插入一个值为 %d的结点!\n",y,x);return head;}
p=(dnode*)malloc(sizeof(dnode));/*分配空间*/
p->info=x;/*设置新结点的值*/
if(!head)/*双链表是空的*/
{
p->rlink=p->llink=NULL;/*新结点作为双链表中的唯一结点,其左右指针均为NULL*/
head=p;/*首指针指向新插入的结点*/
}
else if(q->rlink==NULL)/*在最后一个结点后插入*/
{
p->rlink=q->rlink;/*即为NULL,新插入的结点没有后继。插入操作(1)*/
p->llink=q;/*插入操作(2)*/
q->rlink=p;/*插入操作(4)*/
}/*注意不能和下面的一般情况一样处理,这里如执行下面的(3)将出错!*/
else/*一般情况下的插入*/
{
p->rlink=q->rlink;/*插入操作(1)*/
p->llink=q;/*插入操作(2)*/
q->rlink->llink=p;/*插入操作(3)*/
q->rlink=p;/*插入操作(4)*/
}
return head;
}