本帖最后由 爱学习520 于 2020-11-7 21:11 编辑
这是我上面的完整代码,建立了一个带头节点的链表。谁帮我看看上面哪里错了,可以用下面这个代码调试一下看看
#include<stdio.h>
#include<stdlib.h>
typedef struct node
{
int data;
struct node *next;
}linklist,*Plinklist;
Plinklist create_list()
{
Plinklist phead,ptail,p;
int i,len;
printf("请输入需要创建的链表个数:\n");
scanf("%d",&len);
//建立空结点,该结点不存放数据
p=(Plinklist)malloc(sizeof(linklist));
phead=ptail=p;
p->next=NULL;
for(i=0;i<len;i++)
{
p=(Plinklist)malloc(sizeof(linklist));
//给申请的空间结点赋值
printf("请输入第%d需要每个节点数据:\n",i+1);
scanf("%d",&p->data);
//连结链表
ptail->next=p;
p->next=NULL;
//记录当前指向,不然下次循环得覆盖了
ptail=p;
}
return phead;
}
void ChangeList(Plinklist p)
{
//h1存放奇数、h2存放偶数
Plinklist h1=p;
Plinklist h2=(Plinklist)malloc(sizeof(linklist));
Plinklist even=h2,odd=h1;
p=p->next;
//遍历链表
while(p)
{
//识别偶数
if(p->data%2==0)
{
even->next=p;
even=p;
}
//识别奇数
if(p->data%2!=0)
{
odd->next=p;
odd=p;
}
p=p->next;
}
//测试输出
h1=h1->next;
h2=h2->next;
printf("奇数链表的输出\n");
while(h1)
{
printf("%d",h1->data);
h1=h1->next;
}
printf("\n偶数链表的输出\n");
while(h2)
{
printf("%d",h2->data);
h2=h2->next;
}
}
//函数测试
int main()
{
Plinklist p=create_list();
ChangeList(p);
}
|