| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 242 人关注过本帖
标题:帮我看看哪儿出错了~~
只看楼主 加入收藏
Herable
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2010-12-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:2 
帮我看看哪儿出错了~~
输入两个链表a,b,包括学号、成绩。要求把两个链表合并,按学号升序排列;现象是,输入a,b链表正常,但是合并链表(链表c)却是NULL,错误初步认定在insert()函数里面,帮忙看看~~谢谢啦o(∩_∩)o

#include<stdio.h>
#include<malloc.h>
typedef struct student
{
int code,score;
struct student* next;
} ST;
main()
{  
    ST *creat();
    ST *insert();
    ST *ahead,*bhead,*chead;
    void pr();
    printf("输入A链表数据:\n");
    ahead=creat();
    printf("输入B链表数据:\n");
    bhead=creat();
    printf("\n");
    printf("A链表:\n");
    pr(ahead);
    printf("---------------------------------\n");
    printf("B链表:\n");
    pr(bhead);
    chead=insert(ahead,bhead);
    printf("---------------------------------\n");
    printf("C链表:\n");
    pr(chead);
}
ST *creat(void)
{
ST *p1,*p2,*head;
head=(ST *)malloc(sizeof (ST));
p1=head;
p1->next=NULL;
p2=(ST *)malloc(sizeof (ST));
printf("输入学号,成绩:\n");
scanf("%d,%d",&p2->code,&p2->score);
while(p2->code!=0)
{   
   p1->next=p2;
      p1=p2;
   p2=(ST *)malloc(sizeof (ST));
   printf("输入学号,成绩:\n");
   scanf("%d,%d",&p2->code,&p2->score);
   p1->next=NULL;
}
return (head);
}


void pr(ST *head)
{   
ST *p;
p=head;
p=p->next;
if (p)
do
{   
   printf("\ncode:%d\nscore:%d\n",p->code,p->score);
   p=p->next;
}while (p);
}


ST *insert(ST *ahead,ST *bhead)
{
ST *p1,*p2,*p,*chead;
p1=ahead->next;
p2=bhead->next;
p=chead=(ST *)malloc(sizeof (ST));
p->next=NULL;
while(p1 && p2)
{
   if(p1->code>p2->code)
   {
    p->next=p2;
    p2=p2->next;
    p->next=NULL;
   }
   else
   {
    p->next=p1;
    p1=p1->next;
    p->next=NULL;
   }
}
     if(p1=NULL) p->next=p2;
else p->next=p1;
return (chead);

}

2010-12-18 21:47
venus85
Rank: 6Rank: 6
等 级:侠之大者
帖 子:159
专家分:477
注 册:2010-11-27
收藏
得分:10 
程序代码:
ST *insert(ST *ahead,ST *bhead)
{
ST *p1,*p2,*p,*chead;
p1=ahead->next;
p2=bhead->next;
p=chead=(ST *)malloc(sizeof (ST));
p->next=NULL;
while(p1 && p2)
{
  
   if(p1->code>p2->code)
   {
    p->next=p2;
    p2=p2->next;
    p=(ST *)malloc(sizeof (ST)); 

    p->next=NULL;/* 改成p=p->next,p指针后移,用来存下一个元素*/
   }
   else
   {
    p->next=p1;
    p1=p1->next;
    p=(ST *)malloc(sizeof (ST)); 

    p->next=NULL;
   }
}
     if(p1=NULL) p->next=p2;
else p->next=p1;
return (chead);

}

你的C表中用p=chead=(ST *)malloc(sizeof (ST));申请了一个存放头结点的空间,后面的数你放哪里呢?
你先p->next=p1;再来一句p->next=NULL;p->next不还是NULL吗?你的p指针没有移动啊。



[ 本帖最后由 venus85 于 2010-12-19 18:04 编辑 ]
2010-12-19 18:00
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:10 
把一个倒叙插入到另一个   跟普通的插入没区别的

                                         
===========深入<----------------->浅出============
2010-12-19 19:22
快速回复:帮我看看哪儿出错了~~
数据加载中...
 
   



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

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