约瑟夫问题的实现
1 #include2 #include 3 4 typedef struct LNode 5 { 6 int data; 7 struct LNode *next; 8 }LinkList; 9 10 void CreateList(LinkList *& L, int l)11 {12 L =(LinkList*)malloc(sizeof(LinkList));13 LinkList *r;14 r = L;15 r->next = L;16 LinkList * p;17 18 for (int i = 0; i < l; ++i)19 {20 p =(LinkList*)malloc(sizeof(LinkList));21 p->data = i+1;22 p->next = L;23 r->next = p;24 r = p;25 }26 }27 28 LinkList* find(LinkList *p, int n, int &e, LinkList *L)29 {30 LinkList * r;31 r = p;32 for(int i = 0;i next;35 if (r == L)36 {37 r = r->next;38 }39 }40 LinkList * q;41 if (r->next == L)42 {43 q = r->next->next;44 }45 else46 {47 q = r->next;48 }49 e = q->data;50 r->next = q->next;51 return q;52 }53 54 int main(int argc, char const *argv[])55 {56 LinkList *L;57 int n,k;58 scanf("%d",&n);59 scanf("%d",&k);60 CreateList(L,n);61 int e;62 LinkList* p;63 p = L;64 for (int i = 0; i < n; ++i)65 {66 p = find(p,k,e,L);67 }68 printf("%d",e);69 return 0;70 }