| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1446 人关注过本帖
标题:[转载]2个升序链表合并成降序的单链表的问题
取消只看楼主 加入收藏
海盗家族
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-4-19
收藏
 问题点数:0 回复次数:1 
[转载]2个升序链表合并成降序的单链表的问题

程序描述:将两个升序排列的单链表合并成一个降序排列的单链表;两个降序的链表是按“头插法”建立的,合并过程用的也是“头插法”。
运行结果:
按降序输入结点数值,为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);
}

搜索更多相关主题的帖子: 链表 成降序 单链 
2006-04-21 14:33
海盗家族
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-4-19
收藏
得分:0 

自己搞定了......
函数 link *sum(link *la,link *lb)//合并两个链表 修改如下

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 if(pa->data>pb->data)
{
link *pc=pb->next;
pb->next=lc->next;
lc->next=pb;
pb=pc;
}
else //相同的结点只取一个
{
pa=pa->next;
}
if(pa==NULL) {pb->next=lc->next;lc->next=pb;}

if(pb==NULL) {pa->next=lc->next;lc->next=pa;}

return lc;
}


2006-04-22 00:42
快速回复:[转载]2个升序链表合并成降序的单链表的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028005 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved