#include<stdio.h> #include<stdlib.h> typedef struct node { int data; struct node* next; } Node; void ysflb(int n) { //共有n个人参与报数 Node* head = NULL, * p = NULL, * r = NULL; head = (Node *)malloc(sizeof(Node)); //创建循环链表 head->next = NULL; head->data = 0; p = head; for (int i = 1; i < n; i++) { r = (Node*)malloc(sizeof(Node)); r->data = i; r->next = NULL; p->next = r; p = r; } p->next = head; p = head; while (p->next != p) { //实现报数循环 for (int i = 1; i < 3; i++) { //循环结束时p刚好指向需要删除的结点 r = p; p = p->next; } r->next = p->next;//删除p结点 free(p); p = r->next; } printf("%d\n", p->data+1); } int main() { int m; while (scanf("%d", &m)) { if (m == 0)break; ysflb(m); } } |
Double click to view unformatted code.