学生求约瑟夫环c++讲解

#include
using namespace std;

typedef struct lnode
{
int data;
struct lnode* next;
}LNode,*LinkList; //链表

LinkList Creat_LinkList(int n)//创建单向循环链表
{
LinkList L;
L = new LNode;
L->data = 1;
L->next = L;
LNode* s, * r ;
r = L;
for (int i = 2; i <= n; i++)
{
s = new LNode;
s->data = i;
s->next = r->next;
r->next = s;
r = s;
}
return L;
}

//确定开始位置
LNode* Locate_LinkList(LinkList L, int k) {
LNode* p = L;
while ( p->data != k)
p = p->next;
return p;
}

void Del_LinkList(LNodep, int m, int n)
{
LNode
q;
cout << "输出编号顺序为:";
if (m == 1) { //m=1时,单独处理
q = p;
for (int i = 1 ; i <= n; i++) {
cout << q->data << " ";
q = q->next;
}
}
else {
for (int j = 1; j <= m; j++) {
if (j == m - 1 && p->next != p) {
q = p->next;
p->next = p->next->next;
p = p->next;
cout << q->data << " ";
delete q;
j = 0;
continue;
}
if (p->next == p) {
cout << p->data;
j = m + 1;
}
else p = p->next;
}
}
cout << endl;
}

int main()
{
int n, m, k;
cout << "请输入人数n:";
cin >> n;
cout << "请输入报数上限值m:";
cin >> m;
cout << "输入开始编号k:";
cin >> k;
if (n < 1 || m < 1 || k < 1)
{
cout << "输入有误" << endl;
system("pause");
exit(0);
}
LinkList L;
L = Creat_LinkList(n);
LNode* p;
p = Locate_LinkList(L, k);
Del_LinkList(p, m, n);
LNode* d = L, *d2 = NULL;
for (int i = 1; i < n; i++) {
d2 = d;
d = d->next;
delete d2;
}
delete d;
return 0;
}每个都是什么用处