Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.Main;
- import java.lang.*;
- import java.util.Scanner;
- class Main {
- static Node insert(Node head, int data) {
- Node current = head;
- Node newNode = new Node();
- newNode.data = data;
- if (head == null) {
- newNode.next = newNode;
- head = newNode;
- } else {
- while (current.next != head) {
- current = current.next;
- }
- newNode.next = head;
- current.next = newNode;
- }
- return head;
- }
- static void writeList(Node head) {
- Node current = head;
- if (findLength(head) == 1) {
- System.out.print("Номер последнего: " + head.data);
- } else {
- System.out.print("Список на данный момент: ");
- do {
- System.out.print(current.data + " ");
- current = current.next;
- } while (current != head);
- System.out.println();
- }
- }
- static int findLength(Node head) {
- Node current = head;
- int count = 0;
- if (head != null) {
- do {
- current = current.next;
- count++;
- } while (current != head);
- }
- return count;
- }
- static Node deleteFirst(Node head) {
- Node previous = head, next = head;
- while (previous.next != head) {
- previous = previous.next;
- next = previous.next;
- }
- System.out.println("Был удалён из круга номер " + head.data);
- previous.next = next.next;
- head = previous.next;
- return head;
- }
- static Node deleteAtPosition(Node head, int index, int length) {
- int count = 1;
- Node previous = head, next = head.next;
- if (index == 0) {
- head = deleteFirst(head);
- return head;
- } else {
- while (length > 0) {
- if (count == index) {
- previous.next = next.next;
- System.out.println("Был удалён из круга номер " + next.data);
- }
- previous = previous.next;
- next = previous.next;
- length--;
- count++;
- }
- return head;
- }
- }
- public static int findIndex(int length, int number) {
- int index = -1;
- int count = 0;
- length--;
- while (count != number) {
- index++;
- if (index > length) {
- index = 0;
- }
- count++;
- }
- return index;
- }
- public static void removeGuys(Node head, int length, int m) {
- while (length > 1) {
- int index = findIndex(length, m);
- head = deleteAtPosition(head, index, length);
- writeList(head);
- length--;
- }
- }
- public static int readNumber() {
- boolean isCorrect;
- int length = 0;
- Scanner in = new Scanner(System.in);
- do {
- isCorrect = false;
- try {
- length = in.nextInt();
- if (length < 2 || length > 10) {
- System.out.println("Число должно быть больше единицы и меньше 11");
- isCorrect = true;
- }
- } catch (Exception e) {
- System.out.println("Неверный ввод!");
- isCorrect = true;
- in.nextLine();
- }
- } while (isCorrect);
- return length;
- }
- public static Node fillList(Node head, int length) {
- length++;
- for (int i = 1; i < length; i++) {
- head = insert(head, i);
- }
- return head;
- }
- public static void writeTip(int number) {
- switch (number) {
- case 1:
- System.out.println("N ребят встали в круг. Каждый раз, начиная с первого, из круга выводится каждый M-й");
- break;
- case 2:
- System.out.println("Сколько человек находится в кругу?");
- break;
- case 3:
- System.out.println("Введите M");
- break;
- }
- }
- public static void main(String[] args) {
- writeTip(1);
- Node head = null;
- writeTip(2);
- int length = readNumber();
- writeTip(3);
- int m = readNumber();
- head = fillList(head, length);
- writeList(head);
- removeGuys(head, length, m);
- }
- }
Add Comment
Please, Sign In to add comment