数据结构:合并A、B为线性表C的算法(期待你的解答)
2.23③ 设线性表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)
/* 依题意,合并带头结点的单链表ha和hb为hc */
{
LinkList p,q,s;
p=ha->next;
q=hb->next;
hc=ha;
s=hc;
while(p!=NULL&&q!=NULL)
{ //先插入A
s->next=p;
s=p;
p=p->next;//后移
//插入B
s->next=q;
s=q;
q=q->next;
}
if(q==NULL)
{
while(p!=NULL)//把剩余的ha插入到hc
{s->next=p;
s=p;
p=p->next;
}
}
else
while(q!=NULL) //把剩余的hb插入到hc
{
s->next=q;
s=q;
q=q->next;
}
}
代码是正确的 就是红色部分我不明白 s的next域指向了p,然后s又指向p,这样做的hc链表s不是没有递增吗?求解
[解决办法]
s=p;//就递增了