#include <stdio.h>
#include <stdlib.h>
typedef struct Student{
int num;
struct Student p;
}stu;
stu jl()
{
stu *head,end,node;
int n,i;
end=head=(stu)malloc(sizeof(stu));
printf("链表\n");
printf("输入个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
node=(stu*)malloc(sizeof(stu));
printf("输入学号:");
scanf("%d",&node->num);
head->p=node;
head=head->p;
}
node->p=NULL;
return end;
}
void output(stu o)
{
while(o->p!=NULL)
{
printf("%d ",o->p->num);
o=o->p;
}
}
int main()
{
stu *k1,*lk2,*k3,*lk4,p_q;
stu temp;
int o=0;
lk2=(stu)malloc(sizeof(stu));
lk4=lk2;
k1=jl();
k3=k1;
while(k1->p!=NULL)
{
p_q=k1;
if(k1->p->num%2==0)
{
temp=k1->p;
p_q->p=p_q->p->p;
lk2->p=(stu)malloc(sizeof(stu));
lk2->p->num=temp->num;
printf("找到:%d\n",lk2->p->num);
free(temp);
lk2=lk2->p;
o++;
}
else
k1=k1->p;
}
printf("申请了%d个新结点\n",o);
printf("k3:");
output(k3);
printf("\nlk4:");
output(lk4);
return 0;
}
一些小的逻辑错误把,lk4用于记录存放偶数节点的起始节点,lk2用于插入偶数节点,修改了一下,如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct Student{
int num;
struct Student *p;
}stu;
stu* jl()
{
stu *head,*end,*node;
int n,i;
end=head=(stu*)malloc(sizeof(stu));
printf("链表\n");
printf("输入个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("输入学号:");
scanf("%d",&head->num);
node=(stu*)malloc(sizeof(stu));
head->p=node;
head=head->p;
}
head->p=NULL;
return end;
}
void output(stu* o)
{
while(o->p!=NULL)
{
printf("%d ",o->num);
o=o->p;
}
}
int main()
{
stu *k1,*lk2,*k3,*lk4,*p_q;
stu * temp;
int o=0;
lk2=(stu*)malloc(sizeof(stu));
lk4=lk2; //lk4用于存放新节点的起始节点,lk2用于插入偶数节点
k1=jl();
k3=k1;
while(k1->p!=NULL)
{
// p_q=k1;
if(k1->num%2==0)
{
// temp=k1->p;
lk2->num=k1->num;
lk2->p = (stu*)malloc(sizeof(stu));
lk2=lk2->p;
// p_q->p=p_q->p->p;
// lk2->p=(stu*)malloc(sizeof(stu));
// lk2->p->num=temp->num;
// printf("找到:%d\n",lk2->p->num);
// free(temp);
// lk2=lk2->p;
// o++;
}
k1=k1->p;
}
lk2->p=NULL;
output(lk4);
// printf("申请了%d个新结点\n",o);
// printf("k3:");
// output(k3);
// printf("\nlk4:");
//output(lk4);
return 0;
}
你的代码是漏了很多吗?很多地方有问题啊。