From ca35dc621147091dc3b2eb07d496cd3f512d4b00 Mon Sep 17 00:00:00 2001 From: nVoxel Date: Mon, 23 May 2022 23:34:05 +0300 Subject: [PATCH] =?UTF-8?q?LinkedList=20=D1=81=20=D1=82=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/itis/homework/impl/MyLinkedList.java | 7 -- .../homework/impl/linkedlist/LinkedList.java | 13 ++++ .../impl/linkedlist/LinkedListImpl.java | 72 +++++++++++++++++++ .../impl/linkedlist/LinkedListNode.java | 12 ++++ .../impl/linkedlist/LinkedListNodeImpl.java | 27 +++++++ .../src/test/java/LinkedListTest.java | 64 +++++++++++++++++ 6 files changed, 188 insertions(+), 7 deletions(-) delete mode 100644 Collections2/src/main/java/itis/homework/impl/MyLinkedList.java create mode 100644 Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedList.java create mode 100644 Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListImpl.java create mode 100644 Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNode.java create mode 100644 Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNodeImpl.java create mode 100644 Collections2/src/test/java/LinkedListTest.java diff --git a/Collections2/src/main/java/itis/homework/impl/MyLinkedList.java b/Collections2/src/main/java/itis/homework/impl/MyLinkedList.java deleted file mode 100644 index 471390d..0000000 --- a/Collections2/src/main/java/itis/homework/impl/MyLinkedList.java +++ /dev/null @@ -1,7 +0,0 @@ -package itis.homework.impl; - -import java.util.List; - -public class MyLinkedList implements List { - -} diff --git a/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedList.java b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedList.java new file mode 100644 index 0000000..eb1d4c3 --- /dev/null +++ b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedList.java @@ -0,0 +1,13 @@ +package itis.homework.impl.linkedlist; + +public interface LinkedList { + T get(int index); + + void add(T value); + + void insert(int index, T value); + + void remove(int index); + + int size(); +} \ No newline at end of file diff --git a/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListImpl.java b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListImpl.java new file mode 100644 index 0000000..cdb74fd --- /dev/null +++ b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListImpl.java @@ -0,0 +1,72 @@ +package itis.homework.impl.linkedlist; + +public class LinkedListImpl implements LinkedList { + + private LinkedListNodeImpl firstNode; + private int size; + + public T get(int index) { + return getNodeByIndex(index).getValue(); + } + + public void add(T value) { + if (size == 0) + firstNode = new LinkedListNodeImpl(value); + else + getNodeByIndex(size - 1).setNext(new LinkedListNodeImpl(value)); + + size++; + } + + public void insert(int index, T value) { + LinkedListNodeImpl linkedListNode = new LinkedListNodeImpl(value); + + if (index == 0) { + linkedListNode.setNext(firstNode); + firstNode = linkedListNode; + } + else if (index == size) { + add(value); + return; + } + else { + LinkedListNodeImpl nodeLeft = getNodeByIndex(index - 1); + LinkedListNodeImpl nodeRight = (LinkedListNodeImpl) nodeLeft.getNext(); + + nodeLeft.setNext(linkedListNode); + linkedListNode.setNext(nodeRight); + } + + size++; + } + + public void remove(int index) { + LinkedListNodeImpl nodeLeft = getNodeByIndex(index - 1); + + if (index == size - 1) { + nodeLeft.setNext(null); + } + else { + LinkedListNodeImpl nodeToRemove = (LinkedListNodeImpl) nodeLeft.getNext(); + LinkedListNodeImpl nodeRight = (LinkedListNodeImpl) nodeToRemove.getNext(); + + nodeLeft.setNext(nodeRight); + } + + size--; + } + + public int size() { + return size; + } + + private LinkedListNodeImpl getNodeByIndex(int index) { + LinkedListNodeImpl currentNode = firstNode; + + for (int i = 0; i < index; i++) { + currentNode = (LinkedListNodeImpl) currentNode.getNext(); + } + + return currentNode; + } +} diff --git a/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNode.java b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNode.java new file mode 100644 index 0000000..f1cdb85 --- /dev/null +++ b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNode.java @@ -0,0 +1,12 @@ +package itis.homework.impl.linkedlist; + +public interface LinkedListNode { + + T getValue(); + + void setValue(T value); + + LinkedListNode getNext(); + + void setNext(LinkedListNode node); +} \ No newline at end of file diff --git a/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNodeImpl.java b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNodeImpl.java new file mode 100644 index 0000000..35e7a5c --- /dev/null +++ b/Collections2/src/main/java/itis/homework/impl/linkedlist/LinkedListNodeImpl.java @@ -0,0 +1,27 @@ +package itis.homework.impl.linkedlist; + +public class LinkedListNodeImpl implements LinkedListNode { + + private T value; + private LinkedListNode next; + + public LinkedListNodeImpl(T value) { + this.value = value; + } + + public T getValue() { + return value; + } + + public void setValue(T value) { + this.value = value; + } + + public LinkedListNode getNext() { + return next; + } + + public void setNext(LinkedListNode next) { + this.next = next; + } +} diff --git a/Collections2/src/test/java/LinkedListTest.java b/Collections2/src/test/java/LinkedListTest.java new file mode 100644 index 0000000..3418219 --- /dev/null +++ b/Collections2/src/test/java/LinkedListTest.java @@ -0,0 +1,64 @@ +import itis.homework.impl.linkedlist.LinkedListImpl; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class LinkedListTest { + + @Test + public void testAdd() { + LinkedListImpl testLinkedList = new LinkedListImpl(); + + testLinkedList.add(1); + testLinkedList.add(2); + testLinkedList.add(3); + testLinkedList.add(4); + testLinkedList.add(5); + + Assertions.assertEquals((Integer) 5, testLinkedList.get(4)); + } + + @Test + public void testInsert() { + LinkedListImpl testLinkedList = new LinkedListImpl(); + + testLinkedList.add(1); + testLinkedList.add(2); + testLinkedList.add(4); + testLinkedList.add(5); + + testLinkedList.insert(2, 3); + + Assertions.assertEquals((Integer) 3, testLinkedList.get(2)); + } + + @Test + public void testRemove() { + LinkedListImpl testLinkedList = new LinkedListImpl(); + + testLinkedList.add(1); + testLinkedList.add(2); + testLinkedList.add(3); + testLinkedList.add(4); + testLinkedList.add(5); + + testLinkedList.remove(0); + + Assertions.assertEquals((Integer) 2, testLinkedList.get(0)); + } + + @Test + public void testGetSize() { + LinkedListImpl testLinkedList = new LinkedListImpl(); + + testLinkedList.add(1); + testLinkedList.add(2); + + Assertions.assertEquals(2, testLinkedList.size()); + + testLinkedList.add(3); + testLinkedList.add(4); + testLinkedList.add(5); + + Assertions.assertEquals(5, testLinkedList.size()); + } +}