题目: 下面的程序演示了单向循环链表的建立和表结点的删除,我们要求解的问题如右图所示:猴子选大王。有N 只猴子,从1 到N 进行编号。它们按照编号的顺时针方向,排成一个圆圈,然后从第一只猴子开始报数。第一只猴子报的第一个数字为 1,以后每只猴子报的数字都是它前面猴子所报的数字加1。如果一只猴子报的数字是M,则该猴子出列,下一只猴子重新从1 开始报数。剩下的猴子继续排成一个圆圈报数,直到全部的猴子都出列为止。最后一个出列的猴子胜出。 以下是代码: #include <iostream> using namespace std; struct Monkey { int ID; Monkey *next; }; int main() { Monkey *link, *monkey, *lastMonkey; int totalMonkeys, stride, count; printf("输入猴子的总数: "); scanf("%d", & totalMonkeys); printf("输入猴子报数的出队数字: "); scanf("%d", & stride); // 建立链表 link = NULL; for (int i = 0; i < totalMonkeys; i++) { monkey = new Monkey; monkey->ID = i + 1; if(link == NULL) //链表为空,加入第一只猴子 link = lastMonkey =