于在单链表中,只有指向后继结点的指针,所以只有首先找到p所指结点的前驱结点,然后才能完成插入。而找p所指结点的前驱结点,只能从单链表的第一个结点开始,使用与locate_link类似的方式进行搜索。算法:intinsertPre_link(LinkListllist,PNodep,DataTypex){/*在llist带头结点的单链表中,p所指结点前面插入值为x的新结点*/PNodep1;if(llist==NULL)return0;p1=llist;while(p1!=NULL&&p1->link!=p)p1=p1->link;/*寻找p所指结点的前驱结点*/if(p1=NULL)return0;PNodeq=(PNode)malloc(sizeof(structNode));/*申请新结点*/if(q=NULL){printf(“Outofspace!!!\n”);return0;}q->info=x;q->link=p1->link;p1->link=q;return1;}7.写一算法,在带头结点的单链表llist中,删除p所指的结点,并返回删除成功与否的标志。【答】数据结构采用2.1.3节中单链表定义。思想:由于在单链表中,只有指向后继结点的指针,所以只有首先找到p所指结点的前驱结点,然后才能完成删除。而找p所指结点的前驱结点,只能从单链表的第一个结点开始,使用与locate_link类似的方式进行搜索。intdeleteP_link(LinkListllist,PNodep){/*在llist带头结点的单链表中,删除p所指的结点*/PNodep1;if(llist==NULL)returnNull;p1=llist;while(p1!=NULL&&p1->link!=p)p1=p1->link;/*寻找p所指结点的前驱结点*/if(p1=NULL)return0;