约瑟夫环问题循环链表c++
时间: 2023-11-08 22:05:13 浏览: 120
约瑟夫环问题是一个经典的问题,它的描述是:有n个人围成一圈,从第一个人开始报数,报到m的人出圈,剩下的人继续从1开始报数,直到剩下最后一个人。这个问题可以使用循环链表来解决。下面是C++实现循环链表中约瑟夫环的方法:
1. 定义循环链表数据结构
typedef struct Node {
int data;
struct Node* next;
} LinkNode;
2. 初始化循环链表
void InitNode(LinkNode*& L) {
L = new LinkNode;
L->next = L;
}
3. 尾插法建立循环链表
void CreateListByRear(LinkNode*& L, LinkNode*& r, int arr[], int n) {
r = L;
L->data = arr;
for (int i = 1; i < n; ++i) {
LinkNode* s = new LinkNode;
s->data = arr[i];
r->next = s;
r = s;
}
r->next = L;
}
4. 约瑟夫环问题求解
int Josephus(LinkNode*& L, int m) {
LinkNode* p = L;
while (p->next != p) {
for (int i = 1; i < m - 1; ++i) {
p = p->next;
}
LinkNode* q = p->next;
p->next = q->next;
delete q;
p = p->next;
}
return p->data;
}
以上就是C++实现循环链表中约瑟夫环的方法。如果您有任何问题,请随时问我。
阅读全文