public static int lastRemaining(int n, int m) {
if (n < 1 || m < 1) {
return -1;
}
List<Integer> list = new LinkedList<>();
for (int i = 0; i < n; i++) {
list.add(i);
}
// 要删除元素的位置
int idx = 0;
// 开始计数的位置
int start = 0;
while (list.size() > 1) {
// 只要移动m-1次就可以移动到下一个要删除的元素上*****
for (int i = 1; i < m; i++) { //idx为1-m的数值
idx = (idx + 1) % list.size(); // 举例:当m=4,此时list只剩下3个。
}
list.remove(idx);//循环结束后,删除当前节点,且该编号为下一个循环第一个节点
}
return list.get(0);
}