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