#include <stdio.h>
#include <stdlib.h>
#include<malloc.h>
struct node
{
int data;
struct node *next;
};
struct node *h,*p,*t;
int main()
{
int n,m,i;
scanf("%d%d",&n,&m);
h=(struct node *)malloc(sizeof(struct node));
h->next=NULL;
t=h;
for(i=1; i<=n; i++)
{
p=(struct node *)malloc(sizeof(struct node));
p->data=i;
p->next=NULL;
t->next=p;
t=p;
}
t->next=h->next;
p=h->next;
while(p->next!=p)
{
for(i=1; i<m; i++)
{
p=p->next;
t=t->next;
}
t->next=p->next;
free(p);
p=t->next;
}
printf("%d\n",p->data);
return 0;
}
先结环,然后循环m-1次,找到所需要删的数。此时p指向它,指针t指向它前面的数,然后利用t->next=p->next;将其删除。不要忘了之后再将p调到t的后面。
怎样结环:此处笔者直接利用尾指针t结了环,此外还可
while(p->next)
{
p=p->next;
}来寻找最后一个元素。