请完成以下在链表上实现将两个线性表 (a1,a2,…,an)和(b1,b2,…,bm)合成一个线性表 (a1,a2,…,an,b1,b2,…,bm)的操作算法。Status Merge(LinkList ra, LinkList &rb)//ra,rb分别是存放线性表(a1,a2,…,an)和(b1,b2,…,bm)的循环链的尾指针{if (____)//若循环链表rb为空return ERROR;p=____;//用p记下rb的头结点____; //将rb尾结点的后继指针 指向ra的头结点ra->next=p->next; //将ra尾结点的后继指针指向rb的首结点____; //释放rb原来的头结点空间return OK;}//Merge
请完成以下双向循环链表的初始化操作算法。双向链表的存储结构描述如下:typedef struct DuLNode{ ElemType data; //数据域struct LNode *prior; //前驱指针域struct LNode *next; //后继指针域} DuLNode, *DuLinkList;Status InitList(LinkList &L)//创建一个带头结点的空双向链表L{L=(DuLinkList)malloc(sizeof(DuLNode)); //为头结点分配空间____; //将头结点的前驱指针域和后继指针域均指向头结点}
请完成以下在双向循环链表上的插入操作算法。双向链表的存储结构描述如下:typedef struct DuLNode{ ElemType data; //数据域struct LNode *prior; //前驱指针域struct LNode *next; //后继指针域} DuLNode, *DuLinkList;Status DuLinkListInsert(DuLinkList &L, int i, ElemType e)// 在双向循环链表L的第i个数据元素之前插入新的元素e,i的合法值是1<=i<=表长+1{ DuLinkList ____, s;//p指针指示链表中的头结点int j=0;//j指示p指针所指向的结点在表中的位序号while (jnext;++j;if (p==L)break;}if (____|| j>i-1) // i不合法return ERROR;s=____;//产生新的结点ss->data=e;s->next=____; //修改链,让新结点s插入到第i-1个元素结点p的后面s->prior=p;//s的前驱是pp->next=s;//p的后继是ss->next->prior=s;//s的后继的前驱是sreturn OK;}