两个线性表融合的算法

问题描述:

线性表A(a1,a2,...am)和B(b1,b2,...bm),按以下规则融合

C=(a1,b1,...am,bm,bm,bm+1...bn) 当m<=n时

C=(a1,b1,...an,bn,an,bn+1...am) 当m>n时

单链表的长度m,n均未显示存储,C表利用A表和B表中的结点空间构成。

自己分析在另个地方写了,(未保存。。)代码没书上的好,记录下书上的算法:

Status ListMerge_L(LinkList &A,LinkList &B, LinkList &C)
{
 LinkList  pa,pb,qa,qb;
   pa=A->next;
   pb=B->next;
   C=A;
   while(qa&&qb){
   qa=pa;qb=pb;
   pa=pa->next;pb=pb->next;
   qb->next=qa->next;
   qa->next=qb;
   }
   if(!pa) qb->next=pb;
   pb=B;
free(pb);
return OK;
}

巧妙之处:两个指针的运用,试想一下,如果把顺序打乱会是怎样的结果,刚开始自己思考的时候有想到这个问题,觉得那样插入数据会出错,(开始也没想到要用到两个指针),可是照这样的写法就不会了,代码很精练,融合了很多的思考,学习了。

posted @ 2013-04-21 22:33  wj704  阅读(286)  评论(0编辑  收藏  举报