习题11-7 奇数值结点链表 (20分)

图片说明

部分正确 ,提示: 段错误,求大神解答
struct ListNode *readlist()
{
struct ListNode *head,*tail,*p;
int t=0;
scanf("%d",&t);
head=tail=NULL;
int size=sizeof(struct ListNode);
while(t!=-1)
{
p=(struct ListNode *)malloc(size);
p->data=t;
if(head==NULL)
{
head=p;
}else{
tail->next=p;
}
tail=p;
scanf("%d",&t);
}
tail->next=NULL;
return head;
}
struct ListNode *getodd( struct ListNode **L )
{
struct ListNode *p,*head,*tail,*head2,*tail2;
p=*L;
head=tail=head2=tail2=NULL;
while(p!=NULL)
{
if(p->data%2!=0)
{
if(head==NULL)
{
head=p;
}else{
tail->next=p;
}
tail=p;
p=p->next;
}else{
if(head2==NULL)
{
head2=p;
}else{
tail2->next=p;
}
tail2=p;
p=p->next;
}
}
tail->next=NULL;
tail2->next=NULL;
*L=head2;
return head;
}

2个回答

内存的指针有没有检查过啊

l15973239190
l15973239190 我不熟 我找不出问题在哪里
接近 3 年之前 回复

tail->next=NULL;
tail2->next=NULL;
放在最大的if和else里的p=p->next;后面
删除最后的tail->next=NULL;tail2->next=NULL;

qq_45224223
qh_45224223 我也想知道为什么这样就可以了,大佬能不能解释一下
大约一年之前 回复
Li_Jusong
大魔王! 请问为什么这样就可以了呢?
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问