diff --git a/students/23K0120/23K0120-p23/pom.xml b/students/23K0120/23K0120-p23/pom.xml
new file mode 100644
index 000000000..b5671cb1c
--- /dev/null
+++ b/students/23K0120/23K0120-p23/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p23
+ Очередь
+
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..b81d5a3b0
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Двадцать третья практическая работа!");
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueue.java
new file mode 100644
index 000000000..5216a220a
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueue.java
@@ -0,0 +1,107 @@
+package ru.mirea.practice.s23k0120.task1;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+public class ArrayQueue implements ArrayQueueAdt {
+ private final int size;
+ private final List array;
+ private int indexFront;
+ private int indexRear;
+
+ ArrayQueue(Collection collection) {
+ array = new ArrayList<>(collection);
+ this.size = collection.size();
+ indexFront = 0;
+ indexRear = this.size - 1;
+ }
+
+ ArrayQueue(int size) {
+ array = new ArrayList<>();
+ for (int i = 0; i < size; i++) {
+ array.add(i, null);
+ }
+ indexFront = 0;
+ indexRear = -1;
+ this.size = size;
+ }
+
+ @Override
+ public void enqueue(T element) {
+ indexRear += 1;
+ if (indexRear == size) {
+ indexRear = 0;
+ }
+ array.set(indexRear, element);
+ }
+
+ @Override
+ public T dequeue() {
+ T element;
+ if (isEmpty()) {
+ element = null;
+ } else {
+ element = array.get(indexFront);
+ if (indexRear == indexFront) {
+ indexRear -= 1;
+ }
+ if (indexRear == -1) {
+ indexRear = size - 1;
+ }
+ indexFront += 1;
+ if (indexFront == size) {
+ indexFront = 0;
+ }
+ }
+ return element;
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return indexRear == -1;
+ }
+
+ @Override
+ public void clear() {
+ array.clear();
+ }
+
+ @Override
+ public T front() {
+ return array.get(0);
+ }
+
+ @Override
+ public T rear() {
+ return array.get(indexRear);
+ }
+
+ @Override
+ public String toString() {
+ ArrayList tempList = new ArrayList<>(size);
+ if (indexRear == -1) {
+ return "[]";
+ } else if (indexFront < indexRear) {
+ for (int i = indexFront; i < indexRear + 1; i++) {
+ tempList.add(array.get(i));
+ }
+ } else {
+ for (int i = indexFront; i < size; i++) {
+ tempList.add(array.get(i));
+ }
+ for (int i = 0; i < indexRear + 1; i++) {
+ if (i == indexFront) {
+ break;
+ }
+ tempList.add(array.get(i));
+ }
+ }
+ return tempList.toString();
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueAdt.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueAdt.java
new file mode 100644
index 000000000..9bfc1fd0d
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueAdt.java
@@ -0,0 +1,17 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public interface ArrayQueueAdt {
+ void enqueue(T element);
+
+ T dequeue();
+
+ int size();
+
+ boolean isEmpty();
+
+ void clear();
+
+ T front();
+
+ T rear();
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueTest.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueTest.java
new file mode 100644
index 000000000..3a5b36821
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task1/ArrayQueueTest.java
@@ -0,0 +1,27 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public abstract class ArrayQueueTest {
+ public static void main(String[] args) {
+ ArrayQueue queue = new ArrayQueue<>(5);
+ queue.enqueue(1);
+ queue.enqueue(2);
+ queue.enqueue(3);
+ queue.enqueue(4);
+ queue.enqueue(5);
+ System.out.println(queue);
+ queue.enqueue(8);
+ System.out.println(queue);
+ queue.dequeue();
+ queue.dequeue();
+ queue.dequeue();
+ System.out.println(queue);
+ queue.enqueue(3);
+ System.out.println(queue);
+ queue.enqueue(2);
+ System.out.println(queue);
+ queue.enqueue(1);
+ System.out.println(queue);
+ queue.dequeue();
+ System.out.println(queue);
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractQueue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractQueue.java
new file mode 100644
index 000000000..be41415f4
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractQueue.java
@@ -0,0 +1,29 @@
+package ru.mirea.practice.s23k0120.task2;
+
+import java.util.AbstractList;
+
+public abstract class AbstractQueue implements Queue {
+ private int size;
+ private AbstractList list;
+
+ @Override
+ public abstract void enqueue(T element);
+
+ @Override
+ public abstract T dequeue();
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return list.isEmpty();
+ }
+
+ @Override
+ public void clear() {
+ list.clear();
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/LinkedQueue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/LinkedQueue.java
new file mode 100644
index 000000000..d708087e4
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/LinkedQueue.java
@@ -0,0 +1,49 @@
+package ru.mirea.practice.s23k0120.task2;
+
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
+public class LinkedQueue implements Queue {
+ private final List linkedList;
+ private int size;
+
+ LinkedQueue(Collection collection) {
+ linkedList = new LinkedList<>(collection);
+ this.size = collection.size();
+ }
+
+ LinkedQueue() {
+ linkedList = new LinkedList<>();
+ this.size = 0;
+ }
+
+ @Override
+ public void enqueue(T element) {
+ linkedList.add(size - 1, element);
+ size += 1;
+ }
+
+ @Override
+ public T dequeue() {
+ T element = linkedList.get(0);
+ linkedList.remove(0);
+ size -= 1;
+ return element;
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ @Override
+ public boolean isEmpty() {
+ return linkedList.isEmpty();
+ }
+
+ @Override
+ public void clear() {
+ linkedList.clear();
+ }
+}
diff --git a/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/Queue.java b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/Queue.java
new file mode 100644
index 000000000..876533c9a
--- /dev/null
+++ b/students/23K0120/23K0120-p23/src/main/java/ru/mirea/practice/s23k0120/task2/Queue.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public interface Queue {
+ void enqueue(T element);
+
+ T dequeue();
+
+ int size();
+
+ boolean isEmpty();
+
+ void clear();
+}
diff --git a/students/23K0120/23K0120-p24/pom.xml b/students/23K0120/23K0120-p24/pom.xml
new file mode 100644
index 000000000..b3cf8351a
--- /dev/null
+++ b/students/23K0120/23K0120-p24/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p24
+ Порождающие паттерны
+
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..0396ae4fc
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Двадцать четвёртая практическая работа!");
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/Complex.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/Complex.java
new file mode 100644
index 000000000..5f871ac26
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/Complex.java
@@ -0,0 +1,44 @@
+package ru.mirea.practice.s23k0120.task1;
+
+
+public class Complex {
+ private double real;
+ private double imag;
+
+ public Complex(double real, double imag) {
+ this.real = real;
+ this.imag = imag;
+ }
+
+ public Complex() {
+ this.real = 0;
+ this.imag = 0;
+ }
+
+ public double getReal() {
+ return real;
+ }
+
+ public void setReal(double real) {
+ this.real = real;
+ }
+
+ public double getImag() {
+ return imag;
+ }
+
+ public void setImag(double imag) {
+ this.imag = imag;
+ }
+
+ @Override
+ public String toString() {
+ String complexString;
+ if (imag >= 0) {
+ complexString = String.format("%f + %fi", real, imag);
+ } else {
+ complexString = String.format("%f - %fi", real, Math.abs(imag));
+ }
+ return complexString;
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/ComplexAbstractFactory.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/ComplexAbstractFactory.java
new file mode 100644
index 000000000..6e651ccae
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/ComplexAbstractFactory.java
@@ -0,0 +1,7 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public interface ComplexAbstractFactory {
+ Complex createComplex();
+
+ Complex createComplex(int real, int imag);
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/ComplexFactory.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/ComplexFactory.java
new file mode 100644
index 000000000..286858a79
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task1/ComplexFactory.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s23k0120.task1;
+
+public class ComplexFactory implements ComplexAbstractFactory {
+ @Override
+ public Complex createComplex() {
+ return new Complex();
+ }
+
+ @Override
+ public Complex createComplex(int real, int imag) {
+ return new Complex(real, imag);
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractChairFactory.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractChairFactory.java
new file mode 100644
index 000000000..40a7fc96d
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/AbstractChairFactory.java
@@ -0,0 +1,9 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public abstract class AbstractChairFactory {
+ abstract VictorianChair createVictorianChair(int age);
+
+ abstract MagicChair createMagicChair();
+
+ abstract FunctionalChair createFunctionalChair();
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/Chair.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/Chair.java
new file mode 100644
index 000000000..3df81b72a
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/Chair.java
@@ -0,0 +1,5 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public interface Chair {
+
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/ChairFactory.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/ChairFactory.java
new file mode 100644
index 000000000..120c05bd6
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/ChairFactory.java
@@ -0,0 +1,19 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public class ChairFactory extends AbstractChairFactory {
+
+ @Override
+ VictorianChair createVictorianChair(int age) {
+ return new VictorianChair(age);
+ }
+
+ @Override
+ MagicChair createMagicChair() {
+ return new MagicChair();
+ }
+
+ @Override
+ FunctionalChair createFunctionalChair() {
+ return new FunctionalChair();
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/Client.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/Client.java
new file mode 100644
index 000000000..922a00b38
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/Client.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public class Client {
+ private Chair chair;
+
+ public void sit() {
+ System.out.printf("The client sat on a %s", chair);
+ }
+
+ public void setChair(Chair chair) {
+ this.chair = chair;
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/FunctionalChair.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/FunctionalChair.java
new file mode 100644
index 000000000..fb0576d44
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/FunctionalChair.java
@@ -0,0 +1,8 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public class FunctionalChair {
+
+ public int sum(int a, int b) {
+ return a + b;
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/MagicChair.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/MagicChair.java
new file mode 100644
index 000000000..530792974
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/MagicChair.java
@@ -0,0 +1,8 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public class MagicChair {
+
+ void doMagic() {
+ System.out.println("Abracadabra!");
+ }
+}
diff --git a/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/VictorianChair.java b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/VictorianChair.java
new file mode 100644
index 000000000..198d1501a
--- /dev/null
+++ b/students/23K0120/23K0120-p24/src/main/java/ru/mirea/practice/s23k0120/task2/VictorianChair.java
@@ -0,0 +1,13 @@
+package ru.mirea.practice.s23k0120.task2;
+
+public class VictorianChair implements Chair {
+ private final int age;
+
+ public VictorianChair(int age) {
+ this.age = age;
+ }
+
+ public int getAge() {
+ return age;
+ }
+}
diff --git a/students/23K0120/23K0120-p25/pom.xml b/students/23K0120/23K0120-p25/pom.xml
new file mode 100644
index 000000000..1a9dc0ee0
--- /dev/null
+++ b/students/23K0120/23K0120-p25/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p25
+ Regex
+
diff --git a/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..fd5a3ebbb
--- /dev/null
+++ b/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Двадцать пятая практическая работа!");
+ }
+}
diff --git a/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/task4/Main.java b/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/task4/Main.java
new file mode 100644
index 000000000..6130909eb
--- /dev/null
+++ b/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/task4/Main.java
@@ -0,0 +1,17 @@
+package ru.mirea.practice.s23k0120.task4;
+
+import java.util.Scanner;
+import java.util.regex.Pattern;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Pattern pattern = Pattern.compile("([a-zA-Z.\\d])+@(([a-z]+\\.[a-z]+)|[a-z]+)");
+ String input;
+ try (Scanner scanner = new Scanner(System.in)) {
+ input = scanner.nextLine();
+ }
+ if (pattern.matcher(input).matches()) {
+ System.out.println("Input string is a valid email address");
+ }
+ }
+}
diff --git a/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/task5/Main.java b/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/task5/Main.java
new file mode 100644
index 000000000..33484d8d3
--- /dev/null
+++ b/students/23K0120/23K0120-p25/src/main/java/ru/mirea/practice/s23k0120/task5/Main.java
@@ -0,0 +1,25 @@
+package ru.mirea.practice.s23k0120.task5;
+
+import java.util.Scanner;
+import java.util.regex.Pattern;
+
+public abstract class Main {
+ public static void main(String[] args) {
+ Pattern patternAll = Pattern.compile("[a-zA-Z\\d_]+");
+ Pattern patternDigit = Pattern.compile("\\d");
+ Pattern patternUpper = Pattern.compile("[A-Z]");
+ Pattern patternLower = Pattern.compile("[a-z]");
+ String input;
+ try (Scanner scanner = new Scanner(System.in)) {
+ input = scanner.nextLine();
+ }
+ if (!patternAll.matcher(input).matches()
+ || !patternDigit.matcher(input).find()
+ || !patternUpper.matcher(input).find()
+ || !patternLower.matcher(input).find()) {
+ System.out.println("Input string is not a secure password");
+ } else {
+ System.out.println("Input string is a secure password");
+ }
+ }
+}
diff --git a/students/23K0120/23K0120-p26/pom.xml b/students/23K0120/23K0120-p26/pom.xml
new file mode 100644
index 000000000..9449962f7
--- /dev/null
+++ b/students/23K0120/23K0120-p26/pom.xml
@@ -0,0 +1,13 @@
+
+
+ 4.0.0
+
+ 23K0120
+ ru.mirea.practice
+ 2024.1
+ ../pom.xml
+
+ 23K0120-p26
+ Collections
+
diff --git a/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/Main.java b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/Main.java
new file mode 100644
index 000000000..1b6976156
--- /dev/null
+++ b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/Main.java
@@ -0,0 +1,12 @@
+package ru.mirea.practice.s23k0120;
+
+public final class Main {
+
+ private Main() {
+
+ }
+
+ public static void main(String[] args) {
+ System.out.println("Двадцать шестая практическая работа!");
+ }
+}
diff --git a/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task1/Main.java b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task1/Main.java
new file mode 100644
index 000000000..d0971f25d
--- /dev/null
+++ b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task1/Main.java
@@ -0,0 +1,27 @@
+package ru.mirea.practice.s23k0120.task1;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
+public abstract class Main {
+ public static List reverse(List list) {
+ Stack stack = new Stack<>();
+ int i = 0;
+ while (i < list.size() / 2) {
+ stack.push(list.get(i));
+ stack.push(list.get(list.size() - i - 1));
+ list.set(i, stack.pop());
+ list.set(list.size() - i - 1, stack.pop());
+ i++;
+ }
+ return list;
+ }
+
+ public static void main(String[] args) {
+ ArrayList integers = new ArrayList<>(List.of(new Integer[]{1, 2, 3, 4, 5, 6}));
+ System.out.println(integers);
+ reverse(integers);
+ System.out.println(integers);
+ }
+}
diff --git a/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/CustomIterator.java b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/CustomIterator.java
new file mode 100644
index 000000000..0c9092919
--- /dev/null
+++ b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/CustomIterator.java
@@ -0,0 +1,20 @@
+package ru.mirea.practice.s23k0120.task2and3;
+
+import java.util.Iterator;
+
+public class CustomIterator implements Iterator {
+ Node cursor;
+
+ CustomIterator(CustomList list) {
+ cursor = list.getFirst();
+ }
+
+ public boolean hasNext() {
+ return cursor.getNext() != null;
+ }
+
+ public T next() {
+ cursor = cursor.getNext();
+ return cursor.getData();
+ }
+}
diff --git a/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/CustomList.java b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/CustomList.java
new file mode 100644
index 000000000..23feded57
--- /dev/null
+++ b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/CustomList.java
@@ -0,0 +1,39 @@
+package ru.mirea.practice.s23k0120.task2and3;
+
+import java.util.Iterator;
+
+public class CustomList implements Iterable {
+ private Node first;
+ private final int size;
+
+ public CustomList() {
+ first = null;
+ size = 0;
+ }
+
+ public int getSize() {
+ return size;
+ }
+
+ public Node getFirst() {
+ return first;
+ }
+
+ public void add(T elem) {
+ Node node = new Node<>(elem);
+ if (first == null) {
+ first = node;
+ } else {
+ Node curr = first;
+ while (curr.getNext() != null) {
+ curr = curr.getNext();
+ }
+ curr.setNext(node);
+ }
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new CustomIterator<>(this);
+ }
+}
diff --git a/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/Node.java b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/Node.java
new file mode 100644
index 000000000..db0fea6a3
--- /dev/null
+++ b/students/23K0120/23K0120-p26/src/main/java/ru/mirea/practice/s23k0120/task2and3/Node.java
@@ -0,0 +1,32 @@
+package ru.mirea.practice.s23k0120.task2and3;
+
+public class Node {
+ private T data;
+ private Node next;
+
+ public Node(T data) {
+ this.data = data;
+ next = null;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+
+ public Node getNext() {
+ return next;
+ }
+
+ public void setNext(Node next) {
+ this.next = next;
+ }
+
+ @Override
+ public String toString() {
+ return data.toString();
+ }
+}
diff --git a/students/23K0120/pom.xml b/students/23K0120/pom.xml
index 71c87f518..cac4109dd 100644
--- a/students/23K0120/pom.xml
+++ b/students/23K0120/pom.xml
@@ -36,5 +36,9 @@
23K0120-p20
23K0120-p21
23K0120-p22
+ 23K0120-p23
+ 23K0120-p24
+ 23K0120-p25
+ 23K0120-p26