C/C++,資料結構單鏈表實現約瑟夫環
阿新 • • 發佈:2019-02-17
約瑟夫環——圍成一圈,定義一個數值K,從任意位置開始計數,每走K步刪除當前位置結點,直到剩下最後一個結點,求最後一個結點
//單鏈表結構以及Find函式參見 2016-1-2 13:56 發表部落格
SListNode* Joseph(SListNode *&pos, int K) //約瑟夫環 { assert(pos); if (K > 0) { SListNode *tmp = pos; while (1) { int count = K; while (--count) { tmp = tmp->next; } if (tmp->next == tmp) return tmp; SListNode *cur = tmp->next;//刪除tmp位置的結點,思路:pos與下一位置結點元素值進行交換後,刪除下一結點 DataType Tmpcount = cur->data; tmp->next = cur->next; cur->data = tmp->data; tmp->data = Tmpcount; free(cur); } } return NULL; } void Test7()// Joseph { printf("//Test7() Joseph \n"); SListNode *LL = NULL; PushBack(LL, 1); PushBack(LL, 2); PushBack(LL, 3); PushBack(LL, 4); PushBack(LL, 5); PushBack(LL, 6); PushBack(LL, 7); Find(LL, 7)->next = Find(LL, 1); printf("%d\n", Joseph(LL, 3)->data); }