一道算法的难题

来源:百度知道 编辑:UC知道 时间:2024/06/15 16:38:19
设线性表A=(a1,......,am),B=(b1,......,bm),试写一个按下列规则合并A、B为线性表C的算法,即 使

C=(a1,b1,......am,bm,bm+1,......,bn)当m<=n时;
或者C=(a1,b1,......an,bn,an+1,......,am)当m>n时。

线性表A、B和C均以单链表做存储结构,且C表利用A表和B表中的结点空间构成。注意:单链表的长度值m和n均未只含一类字符

// 与m,n无关:
T *TableMerge(T *pA, T *pB)
{
T *pC, *pTmp, *pCHeader;
T *lastAlloc = NULL;
for(; pA != NULL && pB != NULL; pA = pA->pNext, pB = pB->pNext)
{
pC = malloc(sizeof(T));
if(lastAlloc == NULL) // first one
pCHeader = pC;
else
lastAlloc->pNext = pC;
T.Copy(pC, pA); // copy pA's content to pC
lastAlloc = pC;

pC = malloc(sizeof(T));
lastAlloc->pNext = pC;
T.Copy(pC, pB); // copy pB's content to pC
lastAlloc = pC;
}
pTmp = (pA == NULL) pB : pA;
for(; pTmp != NULL; pTmp = pTmp->pNext)
{
pC = malloc(sizeof(T));
lastAlloc->pNext = pC;
T.Copy(pC, pTmp); // copy pTmp's content to pC
lastAlloc = pC;
}
return pCHeader;
}