1 #include <stdio.h> 2 #include <stdlib.h> 3 struct node 4 { 5 int data; 6 struct node*next; 7 }; 8 int main() 9 { 10 int m,n,x,i,j; 11 struct node*head,*p,*end; 12 head=(struct node*)malloc(sizeof(struct node)); 13 head->next=NULL; 14 end=head; 15 head->data=1; 16 scanf("%d %d",&n,&m); 17 for(i=0; i<n-1; i++) 18 { 19 p=(struct node*)malloc(sizeof(struct node)); 20 p->data=i+2; 21 p->next=head;//环状问题,让p的下一个等于head。 22 end->next=p; 23 end=p; 24 } 25 for(j=0; j<n-1; j++) 26 { 27 p=end->next; 28 for(i=1; i<=m-1; i++) 29 { 30 p=p->next; 31 end=end->next;//循环次数要比m小一个,以便于下面进行删除操作。 32 } 33 end->next=p->next; 34 } 35 printf("%d",end->data);//这里要记得输出end,因为这个地方的p属于被删除的节点,end是要记录编号的地方。 36 return 0; 37 }