void playGame(Child* circle, int k) { Child* prev = circle; while (prev->next != prev) { // 只要还有两个以上的小孩,就继续报数 for (int i = 1; i < k; i++) { prev = prev->next; // 报数 } Child* curr = prev->next; // 当前要出圈的小孩 prev->next = curr->next; // 将当前小孩从链表中删除 std::cout << curr->index << " "; // 打印出圈的小孩编号 delete curr; // 释放内存 } std::cout << prev->index << std::endl; // 打印最后一个小孩的编号 delete prev; // 释放内存 }
时间: 2024-04-26 13:20:46 浏览: 64
CLNode.rar_数据结构_C/C++_
这是一个经典的约瑟夫环问题的解法,其中的 Child 结构体表示每个小孩,k 表示报数到第几个小孩就出圈。具体来说,该函数会首先将 prev 指向链表的头结点,然后在 while 循环中不断循环,直到链表中只剩下一个小孩为止。在每一轮循环中,会先通过 for 循环将 prev 指针移动 k-1 次,然后将 curr 指向 prev 的下一个结点,即当前要出圈的小孩。接着将 prev 的 next 指针指向 curr 的下一个结点,实现从链表中删除 curr。最后打印出圈小孩的编号并释放内存。当只剩下一个小孩时,直接打印该小孩的编号即可。
阅读全文