解题思路:将围成一圈的m只猴子看作是一个循环链表,从第一个节点(猴子)开始移动(数),到第n个节点(猴子),将它删除,然后从后面一个节点(猴子)继续移动,并从1重新开始计数……直到循环链表中只剩一个节点(猴子)
算法描述:
LinkNode *cl; //定义一个循环表,指向头节点
LinkNode *tcl; //定义一个临时指针
tcl=cl;//指向头节点
while ( Lenth(*cl)>1)//直到链表长度为1
{
for(int i=1;i<=n;i++)//数数1-n
{
if(i!=n)
{tcl=tcl->next;}//不是n往后移动指针
else//是n
{
printf : tcl->next->Num monkey leaves. // 显示编号num的猴子离开
tcl->next=tcl->next->next; //删除该节点
tcl=tcl->next;//移动到下一个
cl=tcl;//重新指定循环列表头节点
}
}
}