#include <iostream>
using namespace std;
struct Node {
int data;
Node* next;
Node(int x) : data(x), next(NULL) {}
};
int main() {
int n = 10; // 假设有10个人
int m = 3; // 每次数m个人
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; // 将链表尾部连接到头部,形成循环链表
Node* pre = cur;
cur = head;
int count = 0;
while (cur->next != cur) { // 只剩下一个人时结束循环
count++;
if (count == m) { // 数到m个人时
pre->next = cur->next; // 删除当前结点
cout << cur->data << " "; // 输出当前结点的值
count = 0; // 重新开始计数
Node* tmp = cur; // 释放当前结点
cur = cur->next;
delete tmp;
} else {
pre = cur;
cur = cur->next;
}
}
cout << cur->data << endl; // 输出最后一个结点的值
delete cur; // 释放最后一个结点
return 0;
}
这里delete,是出于安全性考虑。
本题循环列表解决需要知道循环列表的创建,列表元素的删除