3的倍数退出(链表)
题目:25个人围成一个圈,从第1个人开始顺序报名,凡报名为3和3的倍数者退出圈子,找出最后留在圈子中的人原来的序号。#include<stdio.h>
#include<malloc.h>
int m=0;
struct num
{
int i;
struct num *next;
};
struct num *create_list(int n);
void print(struct num *p);
struct num *delet(struct num *head,int n);
void main()
{
struct num *q;
q=create_list(25);
printf("生成链表号码为\n");
print(q);
printf("最后留在圈子中的人原来的序号为\n");
while(25-m>2);
q=delet(q,25-m);
print(q);
}
struct num *create_list(int n)
{
int j;
struct num *head,*tail,*p;
head=tail=NULL;
for(j=1;j<=n;j++)
{
p=(struct num *)malloc(sizeof(struct num));
p->i=j;
p->next=NULL;
if(head==NULL) head=tail=p;
else
{
tail->next=p;
tail=p;
}
}
return head;
}
void print(struct num *p)
{
while(p!=NULL)
{
printf("%d ",p->i);
p=p->next;
}
}
struct num *delet(struct num *head,int n)
{
struct num *p1,*p2;
int i;
for(i=1;i<=n;i++)
{
if(i%3==0)
{
p2->next=p1->next;
free(p1);
p1=p2->next;
m++;
}
else
{
p2=p1;
p1=p1->next;
}
}
return head;
}
这是我写的 结果
后面的怎么没输出来 搞不懂 请教各位大侠