| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 518 人关注过本帖
标题:链表的合并(1)
取消只看楼主 加入收藏
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
结帖率:94.87%
收藏
已结贴  问题点数:4 回复次数:3 
链表的合并(1)
先生成两个链表。在对两个链表进行合并,并从小到大排序
代码一:
程序代码:
#include<iostream>
using namespace std;
struct student{

 int num;

 int score;

 student* next;

 };
student * creat(int N){
student *ne;
ne=new student;
cin>>ne->num>>ne->score;
ne->next=NULL;
student*head;
head =ne;
student *p1;
p1=head;
student *p0;
for(int i=1;i!=N;++i){
ne=new student;
cin>>ne->num>>ne->score;
while((ne->num>p1->num)&&(p1->next!=NULL)){
    p0=p1;
    p1=p1->next;
}
if(ne->num<=p1->num){
    if(head==p1)head=ne;
    else p0->next=ne;
    ne->next=p1;
}else{
    p1->next=ne;
    ne->next=NULL;
}
}


return (head);
}
    
student *hebi(student* head,student *h2)
{
while(h2!=NULL){
student *p1,*ne,*p0;
ne=new student;
ne=h2;
p1=head;    
while((ne->num>p1->num)&&(p1->next!=NULL)){
    p0=p1;
    p1=p1->next;
}
if(ne->num<=p1->num){
    if(head==p1)head=ne;
    else p0->next=ne;
    ne->next=p1;
}else{
    p1->next=ne;
    ne->next=NULL;
}
h2=h2->next;


}
return head;

}    
    
    
        
void print(student * head){
    student *p;
    p=head;
    do{
        cout<<p->num<<" "<<p->score<<endl;
        p=p->next;
    }while(p!=NULL);
}            
int main(){
    int N,M;
    cin>>N>>M;
    student *head1,*head2;
    head1=creat(N);
   head2=creat(M);
hebi(head1,head2);
print(head1);

return 0;
    
    
}


自己感觉这样也是对的,但是输入数据之后,无法达到合并并排序的效果,
代码二
程序代码:
#include<iostream>
using namespace std;
struct student{

 int num;

 int score;

 student* next;

 };
student * creat(int N){
student *ne;
ne=new student;
cin>>ne->num>>ne->score;
ne->next=NULL;
student*head;
head =ne;
student *p1;
p1=head;
student *p0;
for(int i=1;i!=N;++i){
ne=new student;
cin>>ne->num>>ne->score;
while((ne->num>p1->num)&&(p1->next!=NULL)){
    p0=p1;
    p1=p1->next;
}
if(ne->num<=p1->num){
    if(head==p1)head=ne;
    else p0->next=ne;
    ne->next=p1;
}else{
    p1->next=ne;
    ne->next=NULL;
}
}


return (head);
}
    
student *hebi(student* head,student *h2)
{student *p1,*ne,*p0;
while(h2!=NULL){

ne=new student;
ne->num=h2->num;
ne->score=h2->score;
h2=h2->next;
p1=head;    
while((ne->num>p1->num)&&(p1->next!=NULL)){
    p0=p1;
    p1=p1->next;
}
if(ne->num<=p1->num){
    if(head==p1)head=ne;
    else p0->next=ne;
    ne->next=p1;
}else{
    p1->next=ne;
    ne->next=NULL;
}
}
return (head);

}    
    
    
        
void print(student * head){
    student *p;
    p=head;
    do{
        cout<<p->num<<" "<<p->score<<endl;
        p=p->next;
    }while(p!=NULL);
}            
int main(){
    int N,M;
    cin>>N>>M;
    student *head1,*head2;
    head1=creat(N);
   head2=creat(M);
   cout<<endl;
   print(head1);
   print(head2);
   cout<<endl;
hebi(head1,head2);
print(head1);

return 0;
    
    
}

我把指针的数据先提出来,然后再插入,但在测试数据的时候
输入
2 3
2 4
1 2
3 2
4 1
5 2

输出
1 2
2 4
3 2
4 1
5 2

但输入
2 3
4 3
3 2
2 5
1 3
3 2

输出
3 2
4 3
以及其他数据都无法输出正确结果;
有的程序还会崩溃;
有谁能帮我看看问题出在哪;
2013-07-11 19:27
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:0 
回复 2楼 peach5460
作为程序员!怎么可以说程序长呢!
这几天打算自己写课设,问题会很多的
2013-07-11 21:51
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:0 
有兴趣,但是怕玩不动,,摸不进去门,
2013-07-12 16:02
未未来
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:182
专家分:157
注 册:2012-11-6
收藏
得分:0 
回复 8楼 peach5460
好的。
2013-07-12 19:29
快速回复:链表的合并(1)
数据加载中...
 
   



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

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