import java.util.*;
public class Solution {
    public int LastRemaining_Solution(int n, int m) {
        //边界条件
        if(n<1||m<1){
            return -1;
        }
        //构建链表模拟环形队列
        List<Integer> deque=new ArrayList<Integer>();
        //环形队列站小朋友
        for(int i=0;i<n;i++){
            deque.add(i);
        }

        //开始游戏,直到剩下一个小朋友
        //定义一个指针,指向每次游戏需要出队列的小朋友,指针初始时不指向任何一个小朋友
        int cur=-1;
        while(deque.size()>1){
            //开始报数
            for(int i=0;i<m;i++){
                //指针开始移动
                cur++;
                    //因为是环形队列,所以cur指向deque.size()+1的位置时,刚好位移
                    //位于环形队列的头结点
                    if(cur==deque.size()){
                        cur=0;
                    }
            }
            //当一次游戏结束时,此时的cur指向的小朋友出队列
            deque.remove(cur);
            //cur指针后退一步
            cur--;
        }
        return deque.get(0);
    }
}