在线等待!!!高分求助 求指教,链表的奇偶数分离 代码求指教!

Jison_J 2011-12-13 10:51:43
带头结点单链表 奇数偶数分离 为什么运行不出结果 问题出在node *apart(node *head,node *head2)函数中,怎么解决求指教!!!!越详细越好,在线等待!!



#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

//*****************************************结构体声明*******************************************************//

typedef struct Link_node
{
int infor;
Link_node *next;
}node;




//*****************************************函数实现部分*******************************************************//

//链表的初始化

node *init()
{
return NULL;
}

//链表的创建

node *creat(node *head)
{
int n,i;
node *p,*q;
p=(node*)malloc(sizeof(node));
head=p;
p->next=NULL;
printf("Please input Number length:");
scanf("%d",&n);
printf("Please input Number:");
for(i=0;i<n;i++)
{
q=(node*)malloc(sizeof(node));
p->next=q;
scanf("%d",&q->infor);
q->next=NULL;
p=q;
}
printf("\n");
return head;
}

//链表的奇数,偶数分离函数

node *apart(node *head,node *head2)
{
void Display(node *head);
node *p,*p2,*q2;
p=head->next;
head2=(node*)malloc(sizeof(node));
p2=head2;
head2->next=NULL;
while(p)
{
if(p->infor%2)
{
q2=(node*)malloc(sizeof(node));
p2->next=q2;
q2->next=NULL;
q2->infor=p->infor;
p->infor=p->next->infor;
p->next=p->next->next;
free(p->next);
}
else
p=p->next;
}
Display(head2);
return head;
}

//链表的输出

void Display(node *head)
{
node *p;
p=head->next;
while(p)
{
printf("%2d",p->infor);
p=p->next;
}
printf("\n");
}






void main()
{
node *head,*head2;
head=head2=init();
head=creat(head);
Display(head);

printf("**************************************");


//链表的奇数和偶数分离实现
head=apart(head,head2);
Display(head);
}
...全文
127 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
pclvmm 2011-12-13
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

//*****结构体声明***********//

typedef struct Link_node
{
int infor;
struct Link_node *next;// 要加struct
}node;




//****函数实现部分******************//

//链表的初始化

node *init()
{
return NULL;
}

//链表的创建

node *creat(node *head)
{
int n,i;
node *p,*q;
p=(node*)malloc(sizeof(node));
head=p;
p->next=NULL;
printf("Please input Number length:");
scanf("%d",&n);
printf("Please input Number:");
for(i=0;i<n;i++)
{
q=(node*)malloc(sizeof(node));
p->next=q;
scanf("%d",&q->infor);
q->next=NULL;
p=q;
}
printf("\n");
return head;
}

//链表的奇数,偶数分离函数

node *apart(node *head,node *head2)
{
void Display(node *head);
node *p,*p2;
p = head;
head2 = (node*)malloc(sizeof(node));
head2->next = NULL;
p2 = head2;
while(p->next)//此逻辑改的比较多
{
if(p->next->infor%2)
{
p2->next = p->next;
p2 = p->next;
p->next = p->next->next;
p2->next = NULL;
continue;
}
p = p->next;
}
Display(head2);
return head;
}

//链表的输出

void Display(node *head)
{
node *p;
p=head->next;
while(p)
{
printf("%2d",p->infor);
p=p->next;
}
printf("\n");
}






void main()
{
node *head,*head2;
head=head2=init();
head=creat(head);
Display(head);

printf("**************************************\n");


//链表的奇数和偶数分离实现
head=apart(head,head2);
printf("\n");
Display(head);
}


Jison_J 2011-12-13
  • 打赏
  • 举报
回复
我后面已经加了一个返回值了,我用的就是一级指针实现的!所以,应该不是那里错误吧!
Jison_J 2011-12-13
  • 打赏
  • 举报
回复
可以用一级指针实现吗?
雲哉 2011-12-13
  • 打赏
  • 举报
回复
apart(node *, node *)改为 apart(node **, node **)传引用调用
Jison_J 2011-12-13
  • 打赏
  • 举报
回复
非常感谢!!!!!

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧