题目:n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。
当一个数字删除后,从被删除数字的下一个继续删除第m个数字。
求出在这个圆圈中剩下的最后一个数字。
package cn.it.demo.linked;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;
public class LinkDemo {
//第一种方法:用环形链表实现
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入n的值:");
int n = sc.nextInt();
System.out.println("请输入m的值:");
int m = sc.nextInt();
int last = lastRemaining(n,m);
if(last==-1){
System.out.println("请输入合法的数字:");
}else{
System.out.println(last);
}
}
private static int lastRemaining(int n, int m) {
if(n<1||m<1){
return -1;
}
List<Integer>list = new LinkedList<Integer>();
for(int i=0;i<n;i++){
list.add(i);
}
// 要删除元素的位置
int st = 0;
while(list.size() >1){
for (int i = 1; i < m; i++) {
st = (st + 1) % list.size();
}
list.remove(st);
}
return list.get(0);
}
}