为什么代码不循环
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode {
int data;
struct LNode* next;
} LNode, * LinkList;
bool InitList(LinkList& L) {
L = (LNode*)malloc(sizeof(LNode)); // 分配一个头结点
if (L == NULL) // 内存不足分配失败
return false;
L->next = L;
return true;
}
bool ListInsert(LinkList& L, int n) {
LinkList p, s;
p = L;
for (int i = 1; i <= n; i++) {
s = (LNode*)malloc(sizeof(LNode));
if (s == NULL) // 内存不足分配失败
return false;
s->data = i;
s->next = p->next;
p->next = s;
p = s;
if (i == n) {
p = p->next->next;
}
}
return true;
}
void Josephus(LinkList L, int m,int n) {
LinkList p = L->next,s=L->next;
while (n!=1) {
for (int i = 1; i < m; i++) {
if (p->next == s)p = p->next->next;
else
p = p->next;
}
if (p->next->next == s->next)
p = p->next->next;
LinkList q = p->next;
free(q);
n--;// 将p指向下一个节点,继续循环
}
printf("%d", p->data);
free(p);
}
int main() {
LinkList L;
int n, m;
scanf_s("%d%d", &n, &m);
InitList(L);
ListInsert(L, n);
Josephus(L, m,n);
free(L);
return 0;
}