有两个集合A和B,利用带头结点链表表示,设头指针分别为la和lb。两集合的链表元素皆为递增有序。设计一个算法,将A与B合并,合并后仍然保持整个链表中的数据依次递增。不得利用额外的结点空间,只能在A和B的原有结点空间上完成。要求: 根据设计思想,采用C或C

admin2016-03-29  34

问题 有两个集合A和B,利用带头结点链表表示,设头指针分别为la和lb。两集合的链表元素皆为递增有序。设计一个算法,将A与B合并,合并后仍然保持整个链表中的数据依次递增。不得利用额外的结点空间,只能在A和B的原有结点空间上完成。要求:
根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

选项

答案算法的设计如下: typedef struct LNode{ int data: struct LNode:lc next; }*Linkedlist; LinkedList Union(IJnkedList la,lb){ pa=la一>next; pb=lb一>next; //设工作指针pa和pb pc=la; //pc为结果链表当前结点的前驱指针 while(pa&&pb){ if(pa一>datadata.){ pc一>next=pa; pc=pa; pa=pa一>next; } else if(pa一>data>pb一>data){ pc一>next=pb; pc=pb; pb=pb一>next; } else{//处理pa一>data=pb一>data. pc一>next:pa; pc=pa; pa=pa一>next; u=pb; pb=pb->next; free(u); } } if(pa)pc->next=pa; //若la表未空,则链入结果表 else pc->next=pb; //若lb表未空,则链入结果表 free(lb); //释放lb头结点 return(la); }

解析
转载请注明原文地址:https://kaotiyun.com/show/s1Ri777K
0

相关试题推荐
最新回复(0)