程序描述:将两个升序排列的单链表合并成一个降序排列的单链表;两个降序的链表是按“头插法”建立的,合并过程用的也是“头插法”。
运行结果:
按降序输入结点数值,为0时算法结束:6 4 2 0
2->4->6
按降序输入结点数值,为0时算法结束:5 3 1 0
1->3->5
--光标到此就停住了,此时CPU占用100%
请问是哪个地方出错了?最好带注释
完整代码如下或附件
#include "iostream.h"
struct link
{
int data;//数据类型
link *next;//指针类型,存放下一个元素的地址
};
//头插法建立带头结点的单链表
link *hcreat()
{
link *s,*p;
int i;
cout<<"按降序输入结点数值,为0时算法结束:";
cin>>i;
p=new link;
p->next=NULL;
while(i)
{
s=new link;
s->data=i;
s->next=p->next;
p->next=s;
cin>>i;
}
return p;
}
//输出单链表
void print(link *head)
{
link *p;
p=head->next;
while(p->next!=NULL)
{
cout<<p->data<<"->";//输出表中非最后一个的元素
p=p->next;
}
cout<<p->data;//输出表中最后一个元素
cout<<endl;
}
//合并两个链表
link *sum(link *la,link *lb)
{
link *pa=la->next;
link *pb=lb->next;
link *lc=la;
lc->next=NULL;
while((pa!=NULL)&&(pb!=NULL))
if(pa->data<pb->data)
{
link *pc=pa->next;
pa->next=lc->next;
lc->next=pa;
pa=pc;
}
else
{
link *pc=pb->next;
pb->next=lc->next;
lc->next=pb;
}
while(pa!=NULL)
{
link *pc=pb->next;
pa->next=lc->next;
lc->next=pa;
pa=pc;
}
while(pb!=NULL)
{
link *pc=pb->next;
pb->next=lc->next;
lc->next=pb;
pb=pc;
}
return lc;
}
void main()
{
link *p,*q,*r;
p=hcreat(); //头插法建立第一个链表(按降序排列)
print(p);//输出第一个单链表
q=hcreat();//头插法建立第二个链表(按降序排列)
print(q);
r=sum(p,q);//合并
print(r);
}