编辑代码

import java.util.Scanner;

public class JosephusProblem {
    static class SinglyLinkedCircularList {
        int val;
        SinglyLinkedCircularList next;

        public SinglyLinkedCircularList(int val) {
            this.val = val;
        }
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入总人数N:");   // 键盘输入值---总人数N、起始位置K和报数上限M
        int n = scanner.nextInt();
        System.out.print("请输入起始位置K:");
        int k = scanner.nextInt();
        System.out.print("请输入报数上限M:");
        int m = scanner.nextInt();

        SinglyLinkedCircularList head = new SinglyLinkedCircularList(1);
        SinglyLinkedCircularList current = head;

        for (int i = 2; i <= n; i++) {
            current.next = new SinglyLinkedCircularList(i);
            current = current.next;
        }
        current.next = head;

        current = head;
        for (int i = 1; i < k; i++) {
            current = current.next;
        }

        System.out.println("出列编号序列为:"); // 开始报数出列
        while (n > 0) {
            for (int i = 1; i < m; i++) {
                current = current.next;
            }

            System.out.print(current.next.val + " ");
            current.next = current.next.next;
            n--;

            if (n > 0) {
                m = current.val;
                current = current.next;
            }
        }
    }
}