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

admin2019-08-15  40

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

选项

答案算法的设计如下: typedef struct LNode{ int data; struct LNode * next; } * Linkedlist; LinkedList Union(LinkedList la,lb){ pa=la一>next: pb=lb一>next: //设工作指针pa和pb pc=la; //pc为结果链表当前结点的前驱指针 while(pa&&pb){ if(pa->data<pb一>data){ 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(1b); //释放lb头结点 return(1a); }

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

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