if (cur == NULL) return;
// 由于是循环链表,需要设置终止条件
linknode* start = cur;
do {
printf("%d ", cur->data);
cur = cur->next;
} while (cur != start);
}
int main() {
linklist header = initnode();//初始化循环链表
if (header!=NULL) {
prin(header);//打印循环链表
//实现约瑟夫生者死者游戏
printf("\n\n下船顺序:");
linknode* pre = header;
linknode* cur = header->next;
int total = 30;
int remain = 15;
int step = 9;
while (total > remain) {//说明人数比15多,还应继续淘汰
for (int i = 1; i < step; i++) {
pre = cur;//找到第九个结点
cur = cur->next;
}
printf("%d ", cur->data);//打印这第九个数字
pre->next = cur->next;
linknode* temp = cur;
cur = cur->next;//并把这第九个数字删除
free(temp);
total--;
}
printf("\n\n打印剩余人员:");
linknode* start = cur;
do {//循环链表的打印方式
printf("%d ", cur->data);
cur = cur->next;
} while (cur != start);
登录后提交答案