救命啊,这个程序怎么编啊

来源:百度知道 编辑:UC知道 时间:2024/05/22 04:11:19
设线性表A=(a1,...,am), B=(b1,...,bn),试写
一个按下列规则合并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均未
显式存储。

实现下列函数:
void Merge(LinkList ha, LinkList hb, LinkList &hc)
/* 依题意,合并带头结点的单链表ha和hb为hc */

单链表类型定义如下:
typedef struct LNode{
ElemType data;
struct LNode *next;
} LNode, *LinkList;

小弟穷,没有分,希望各位老鸟体谅啊!

//表头空
void Merge( LinkList ha, LinkList hb, LinkList &hc )
{
LinkList p=ha, q=hb;
hc = ha;
p= p->next; q = q->next;
if ( !p )
{
if ( q )
{
hc = hb;
}
return;
}
ha = p ; hb = q;
while ( (p = p->next) && (q = q->next) )
{
ha->next = hb;
ha = p;
hb->next = p;
hb = q;
}
ha->next = hb;
if (p)
{
hb->next = p;
}
}

/*
这里假设链表头不存储数据.

-_-!看错题意了,丢人那…
*/
void Merge(LinkList ha, LinkList hb, LinkList &hc)
{
struct LNode *p;
while( a->next != NULL && b->next != NULL )
{
p = (struct LNode *)molloc( sizeof(struct LNode) );
p->next = NULL;
p->data = a->next->data;
c->next = p;
c = p;

p = (struct LNode *)molloc( sizeof(struct LNode) );
p->next = NULL;
p->data = b->next->data;
c->nex