数据结构线性表习题(一)

来源:互联网 发布:淘宝聚划算秒杀 编辑:程序博客网 时间:2024/05/16 17:05
已知三个带头结点的线性链表A,B,C中的结点均依元素值从小向大递减排列,编写算法对A表进行如下操作:使操作后的链表A中仅留下三个表中均包含的数据元素的结点,且没有值相同的结点,并释放所有无用的结点。算法时间复杂度为O(m+n+p),为m,n,p三表长度


设计思路:留下三个表中的公共数据,首先查找两表A、B的公共数据,然后去C中找有无该数据。


代码:

void Common(LinkList A,LinkList B,LinkList C){pa=A->next;pb=B->next;pc=C->next;pre=A;while(pa&&pb&&pc){while(pa&&pb){if(pa->data<pb->data){u=pa;pa=pa->next;free(u);}else if(pa->data>pb->data){pb=pb->next;}else if(pa&&pb){while(pc&&pc->data<pa->data){pc=pc->next;}if(pc){if(pc->data>pa->data){u=pa;pa=pa->next;free(u);}else{if(pre==A){pre->next=pa;pre=pa;pa=pa->next;}else if(pre->data==pa->data){u=pa;pa=pa->next;free(u);}else {pre->next=pa;pre=pa;pa=pa->next;}pb=pb->next;pc=pc->next;}}}}}if(pa==NULL){pre->next=NULL;}else{pre->next=NULL;while(pa!=NULL){u=pa;pa=pa->next;free(u);}}return A;}


原创粉丝点击