求助!链表!
这是个求一个链表有N个元素,且任何元素均不为0)分拆成两个链表。使A中大于0的元素存放B中小于0的元素存放在C中;
#include <malloc.h>
#include <stdio.h>
struct lond
{
int num;
struct lond *next;
}lond;
struct lond *input(int n)
{
struct lond *head;
struct lond *p1,*p2;
int i;
p1=p2=(struct lond *)malloc(sizeof(lond));
p1->num=0;p1->next=NULL;
head=p1;
for (i=0;i<n;i++)
{
p1=(struct lond *)malloc(sizeof(lond));
scanf ("%d",&p1->num);p1->next=NULL;
p2->next=p1;
p2=p2->next;
}
return(head);
}
struct lond *fenkai(struct lond *head,int n)
{
struct lond *p1,*p2,*p3,*p4,*p5;
struct lond *head1,*head2;
int i;
p2=p3=(struct lond*)malloc(sizeof(lond));
head1=p2;p2->next=NULL;p2->num=0;
p3=p4=(struct lond*)malloc(sizeof(lond));
head2=p3;p3->next=NULL;p3->num=0;
p1=head;
for (i=0;i<n;i++)
{
if (p1->num>0)
{
p2=(struct lond*)malloc(sizeof(lond));
p2->num=p1->num;
p4->next=p2;
p4=p4->next;
}
else
{
p3=(struct lond*)malloc(sizeof(lond));
p3->num=p1->num;
p5-next=p1;
p5=p5-next;
}
p1=p1->next;
}
return(head1);
}
struct lond *print(struct lond *head)
{
struct lond *p;
p=head;
if (head==NULL)
printf ("error");
else
{
while (p!=NULL)
{
printf ("%d",p->num);
p=p->next;
}
}
printf ("\n");
return;
}
main()
{
int n;
struct lond *head;
scanf ("%d",&n);
head=input(n);
print(head);
head=fenkai(head,n);
print(head);
}
问题点数:5、回复次数:5Top
1 楼softwarewander(激情燃烧的岁月…… 还想看,咋办?)回复于 2006-12-01 09:22:44 得分 0
什么问题啊? 是逻辑错误 呢还是编译不通过
看lz的代码 print函数就没正确返回Top
2 楼softwarewander(激情燃烧的岁月…… 还想看,咋办?)回复于 2006-12-01 09:58:00 得分 0
搂住的fenkai()里面不需要7个指针吧。 太多了, 搞得头都晕了
尤其是党p1-〉num<0的时候
p3->num=p1->num;
p5-next=p1;
p5=p5-next;
明显不对 之前都没有赋值p5 怎么就用起p5了
肯定不对Top
3 楼augustusqing(喜欢雨路的火焰狼)回复于 2006-12-01 10:13:43 得分 0
想不出来楼主提问的时候在想什么。。。。。。
fenkai()里面p4,p5不知道楼主怎么分配的
p3=(struct lond*)malloc(sizeof(lond));
p3->num=p1->num;
p5-next=p1;
p5=p5-next;
这里的p5是指向哪里了
我回答这样的问题,看这样的程序我是傻子!Top
4 楼shuben()回复于 2006-12-01 10:25:01 得分 0
p2=p3=(struct lond*)malloc(sizeof(lond));
head1=p2;p2->next=NULL;p2->num=0;
p3=p4=(struct lond*)malloc(sizeof(lond));
head2=p3;p3->next=NULL;p3->num=0;
这里改为
p2=p4=(struct lond*)malloc(sizeof(lond));
head1=p2;p2->next=NULL;p2->num=0;
p3=p5=(struct lond*)malloc(sizeof(lond));
head2=p3;p3->next=NULL;p3->num=0;
p1指向最初得链表
p2p4指向分开的一个链表
p3p5指向另一个Top
5 楼wen513520()回复于 2006-12-01 12:19:32 得分 0
不好意思!三楼的,我开始的想法跟四楼的一样。
但就是能建立表头链表!不知道问题出在哪?望各位大虾指教!Top





