php--循环单链表的实现,解决约瑟夫丢手帕问题 no=$no; $this->next=null; }}function addChild(&$first,$n){ $cur=null; for ($i=0;$i<$n;$i++){ $child=new Child($i+1); if($i==0){ $first=$child; $first->next=$child; $cur=$first;} else{ $cur->next=$child; $child->next=$first; $cur=$cur->next; } }}function showChild($first){$cur=$first;while($cur->next!=$first){ echo '小孩的编号为'.$cur->no.''; $cur=$cur->next;}echo '小孩的编号为'.$cur->no.'';}function countChild($first,$m,$k){ $tail=$first; //首先让$tail指向最后一个// while($tail->next!=$first){// $tail=$tail->next;// } //考虑是从第几个人开始数数 //第k个人开始数 for($i=0;$i<$k-1;$i++){ // $tail=$tail->next; $first=$first->next; } while($tail!=$first){ //当$tail==$first则说明只有最后一个人了. for($i=0;$i<$m-1;$i++){ $tail=$tail->next; $first=$first->next; } echo '出圈额人的编号是'.$first->no; //把$first指向的节点小孩删除环形链表 $first=$first->next; $tail->next=$first; } echo '最后留在圈圈的人的编号是'.$tail->no;}$first=null;$n=5;addChild(&$first,$n);showChild($first);countChild($first,3,2);