已知有两个带头的结点的循环单链表LA、LB,编写一个算法,将两个循环单链表合并为一个循环单链表

其头指针为LA.

已知带有头结点的两个单链表 la 和 lb 都是非递增有序序列。


编写好的算法实现将这两个链表合并为新的带有头结点的链表 lc ,使得 lc 的元素仍然是非递增有序排列的序列,如果遇到 la 与 lb 中元素相同,则只取 la 中的元素,去掉 lb 中的元素。已知 la 的元素个数 为 m , lb 的元素个数为 n。

循环单链表是单链表的另一种形式,其结构特点链表中最后一个结点的指针域不再是结束标记,而是指向整个链表的第一个结点,从而使链表形成一个环。和单链表相同,循环链表也有带头结点结构和不带头结点结构两种,带头结点的循环单链表实现插入和删除操作较为方便。

温馨提示:内容为网友见解,仅供参考
第1个回答  2019-10-17
将两个循环单链表合并为一个循环单链表的算法如下
先找到两个链表的尾,并分别由指针p、q指向它们,然后将第一个链表的尾与第二个表的第一个结点链接起来,并修改第二个表的尾Q,使它的链域指向第一个表的头结点。
LinkList merge_1(LinkList LA,LinkList LB)
/*此算法将两个链表的首尾连接起来*/
{ Node *p, *q; p=LA; q=LB;
while (p->next!=LA) p=p->next; /*找到表LA的表尾*/
while (q->next!=LB) q=q->next; /*找到表LB的表尾*/
q->next=LA;/*修改表LB 的尾指针,使之指向表LA 的头结点*/
p->next=LB->next;/*修改表LA的尾指针,使之指向表LB 中的第一个结点*/
free(LB);
return(LA);
}

...LB,编写一个算法,将两个循环单链表合并为一个循环单链表
已知带有头结点的两个单链表 la 和 lb 都是非递增有序序列。编写好的算法实现将这两个链表合并为新的带有头结点的链表 lc ,使得 lc 的元素仍然是非递增有序排列的序列,如果遇到 la 与 lb 中元素相同,则只取 la 中的元素,去掉 lb 中的元素。已知 la 的元素个数 为 m , lb 的元素个数...

...链表LA、LB,编写算法,将两个循环单链表合并成一个单链表,其头指针为...
你把链表La的末节点指向LB的头节点的下一个节点,把LB的末节点变为NULL即可!

设计一个算法,将两个递增链表La、Lb合并成一个递增链表Lc。
\/\/将两个递增链表La、Lb合并成一个递增链表Lc { linklist *p;p=Lc;while(La->next!=NULL&&Lb->next!=NULL){ if(La->next->data>Lb->next->data){ ListInsert(p,Lb->next->data);Lb=Lb->next;} else { ListInsert(p,La->next->data);La=La->next;} } if(La->next==NULL)...

有两个带头结点的单循环链表L1和L2,编写算法将链表L2链接到链表L1之后成...
p->next=L1; \/\/将next指向L1头节点,形成循环链表 return L1;}

...头指针为La,Lb的两个递减有序的单链表合并为一个递减有序的单链表...
head->next = NULL; return head;} LinkList merge(LinkList LA,LinkList LB) { pNode a,b,c,head; a = LA; b = LB; c = head = GetNewList(); head->data = LA->data + LB->data; while(a->next && b->next) { c->next = (pNode)malloc(...

试写一个算法,将两个有序线性表合并成一个有序线性表。
\/\/已知单链线性表La和Lb的元素按非递减排列 \/\/归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列 AH=La;BH=Lb;CH=Lc;pa=AH_next;pb=BH_next;CH=pc=AH;\/\/用La的头结点作为Lc的头结点 while(pa&&pb){ if(pa->data<=pb->data){ pc-<next=pa;pc=pa;pa=pa->next;} ...

...有两个单链表LA和LB,其元素均为非递减有序排列,编写一个算法...
}LinkList merge(LinkList LA,LinkList LB) {pNode a,b,c,head;a = LA;b = LB;c = head = GetNewList();head->data = LA->data + LB->data;while(a->next && b->next) {c->next = (pNode)malloc(sizeof(NODE));if(c->next == NULL) {printf("内存分配失败!\\n");...

单链表和循环链表操作用什么不一样?
解答:先从La的头结点开始把指针移动到单链表的最后一个结点,即移动了La长度的结点数目,最后把Lb接在La之后,因此时间复杂度是O(n)。(2)La、Lb都是带头结点的单循环链表,如何实现将Lb接在La之后形成一个循环链表?时间复杂度是多少?解答:先从La的头指针开始,把指针移动到循环链表的最后一...

线性表的拆分与合并
已知线性表LA的数据元素(n个),现要求将LA的数据元素复制到另一个线性表LB中。设线性表LA=(a1, a2, …, am),LB=(b1, b2, …, bn)。试编写一个算法,将LA、LB合并为线性表LC,使用C++编写哦要求LA、LB和LC均以单链表为存储结构,且LC表利用LA和LB中结点空间,这里m和n的值没有保存在头结点中,并分析...

已知一个带头结点的循环链表为list,设计一个算法,删除链表中数据域值...
已知一个带头节点的循环列表为list设计一个算法,删除链表中数据域值为item的所有结点C++

相似回答