c++约瑟夫问题循环链表图解
时间: 2023-11-08 10:05:09 浏览: 124
c++循环链表解决约瑟夫环问题
4星 · 用户满意度95%
好的,关于C++循环链表的约瑟夫问题,我可以给你一个简单的图解。
首先,我们需要定义一个结构体来表示链表中的每个节点:
```
struct Node {
int val;
Node* next;
Node(int x) : val(x), next(NULL) {}
};
```
然后,我们可以先创建一个循环链表,其中每个节点的值为1到n:
```
Node* createList(int n) {
Node* head = new Node(1);
Node* cur = head;
for (int i = 2; i <= n; i++) {
cur->next = new Node(i);
cur = cur->next;
}
cur->next = head;
return head;
}
```
接下来,我们可以按照约瑟夫问题的规则,依次删除每个第m个节点,直到只剩下一个节点为止:
```
int josephus(int n, int m) {
Node* head = createList(n);
Node* cur = head;
while (cur->next != cur) {
for (int i = 1; i < m - 1; i++) {
cur = cur->next;
}
Node* tmp = cur->next;
cur->next = tmp->next;
delete tmp;
cur = cur->next;
}
int ans = cur->val;
delete cur;
return ans;
}
```
这样,我们就可以得到最后剩下的节点的值,即为约瑟夫问题的解。
阅读全文