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);
}
}