我打算使用链表解决 C 中的约瑟夫斯问题,但它不起作用。我已经尝试了多种方法来做到这一点,所以我很困惑。
#include "stdlib.h"
#include "stdio.h"
struct Node {
int num;
struct Node *Next;
};
typedef struct Node *PtrToNode;
int main() {
int n, m, i;
PtrToNode p, q;
printf("Please input n, m\n");
scanf("%d %d", &n, &m);
p = (PtrToNode)malloc(sizeof(struct Node));
p->num = 1;
p->Next = p;
for (i = 2; i <= n; i++) {
q = (PtrToNode)malloc(sizeof(struct Node));
q->num = i;
q->Next = p;
p->Next = q;
p = q;
}
while (q->Next != q) {
for (i = 1; i <= m; i++)
p = q->Next;
q = p;
printf("%d, ", q->num);
p->Next = NULL;
free(q);
}
printf("%d\n", p->num);
free(p);
//system("pause");
return 0;
}
我有点理解 struct 函数和 typedef,所以我想我在那里没有任何问题(?)。我猜我在主函数中犯了一个错误。