C++两个有序链表的合并

来源:百度知道 编辑:UC知道 时间:2024/06/24 06:29:30
下面我是写的链表合并方法;可运行总是出错,高手帮我看看,帮我改改,万分感谢!
void Chain<T>::Merge(Chain<T>&A,Chain<T>&B,Chain<T>&C)
{
ChainNode<T>*p,*q,*t;
p=A.first;q=B.first;
if(p->data>=q->data)C.first=p=A.first;
else
C.first=q=B.first;
t=C.first;
while(p->link&&q->link)
{
p=p->link;q=q->link;
if(p->data>=q->data)t->link=p;
else
t->link=q;
t=t->link;
}
if(!p->link)t->link=q;
if(!q->link)t->link=p;

}
大哥,还是有错啊 麻烦你再给我写个正确的吧 带有main方法的 你先调试通过了 就发给我吧 谢谢了

你这个合并方法是不正确的,我看你的程序执行的只是比较两个链表对应序号的节点,大的就放到c链表里,两个链表里的很多节点给漏掉了,并没有真正实现两个链表的合并.修改后如下:
void Chain<T>::Merge(Chain<T>&A,Chain<T>&B,Chain<T>&C)
{
ChainNode<T>*p,*q,*t;
p=A.first;q=B.first;
if(A.first->data>=B.first->data)
t=C.first=A.first;
else
t=C.first=B.first;
while(p!=NULL&&q!=NULL)
{
if(p->data>=q->data)
{
t=p;
p=p->link;
t=t->link;}
else
{
t=q;
q=q->link;
t=t->link;}
}
while(p==NULL&&q!=NULL)
{
t=q;
q=q->link;
t=t->link;
}
while(q==NULL&&p!=NULL)
{
t=p;
p=p->link;
t=t->link;
}
t->link=NULL;

}
我怎么调试呀,好多东西都没定义,我又不清楚你定义的数据结构.你要不把题目全发给我,我给你看.