From c480b41fa2ddb984a977bfc1e15d51b8d933aa03 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 24 Jul 2021 22:43:34 -0400 Subject: [PATCH 1/2] completed all tests, including optional features. My God, just use an array or a list or something :) --- .idea/compiler.xml | 2 + .idea/jarRepositories.xml | 20 + .idea/libraries/Maven__junit_junit_4_13_1.xml | 13 + .../Maven__org_hamcrest_hamcrest_core_1_3.xml | 13 + .idea/modules.xml | 1 + .idea/workspace.xml | 421 +++++++----------- pom.xml | 8 + .../singlylinkedlist/SinglyLinkedList.java | 158 ++++++- .../SinglyLinkedListTest.java | 147 ++++++ 9 files changed, 521 insertions(+), 262 deletions(-) create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/libraries/Maven__junit_junit_4_13_1.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 4be381c..a07d5fa 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,11 +6,13 @@ + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_13_1.xml b/.idea/libraries/Maven__junit_junit_4_13_1.xml new file mode 100644 index 0000000..9fa24fc --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_13_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml new file mode 100644 index 0000000..f58bbc1 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml index ad4fefc..8b9083f 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -3,6 +3,7 @@ + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index b6d36bd..83f0b54 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,86 +1,25 @@ + + - + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -212,60 +152,19 @@ + + - + + + - - - - - - - - - - + + + + + + + + + + + + + + - - - - - - - - + + + + + + + - - - - - - + @@ -494,12 +388,17 @@ - - - - - + + + diff --git a/pom.xml b/pom.xml index ffa3f40..87a2afa 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,14 @@ com.zipcodewilmington singlylinkedlist 1.0-SNAPSHOT + + + junit + junit + 4.13.1 + test + + \ No newline at end of file diff --git a/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java b/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java index 2fb3165..81bc4b5 100644 --- a/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java +++ b/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java @@ -3,5 +3,161 @@ /** * Created by leon on 1/10/18. */ -public class SinglyLinkedList { +public class SinglyLinkedList> { + + + + class Node{ + T data; + Node next; + + public Node(T data){ + this.data = data; + this.next = null; + } + } + + public Node head = null; + public Node tail = null; + + public void addNode(T data){ + Node newNode = new Node(data); + + if(head == null) { + head = newNode; + } else { + tail.next = newNode; + } + tail = newNode; + } + + + public Integer size(){ + Integer count = 0; + Node current = this.head; + count = current.next == null ? 0 : 1; + while(current.next != null){ + count++; + current = current.next; + } + return count; + } + + public Integer find(T valueToFind){ + Node current = this.head; + Integer index = 0; + if(current == null) + return -1; + while(current != null){ + if(current.data.equals(valueToFind)) + return index; + index++; + current = current.next; + } + return -1; + } + + public Boolean contains(T valueToFind){ + return this.find(valueToFind) >= 0; + } + + + public void remove(T valueToFind){ + Node current = head; + Node last = head; + while(current.next != null){ + if(current.data.equals(valueToFind)) + last.next = current.next; + last = current; + current = current.next; + + } + } + + public void display() { + Node current = head; + //checkListEmpty("There's no list, idiot."); + System.out.println("Nodes of singly linked list:"); + while (current != null) { + System.out.println(current.data + ""); + current = current.next; + } + } + + public T get(Integer index){ + Node current = head; + Integer currentIndex = 0; + if(index >= size()) + return null; + if(index == size() - 1) + return (T)tail.data; + for(int i = 0; i < index; i++){ + current = current.next; + } + return (T)current.data; + } + + public SinglyLinkedList copy(){ + SinglyLinkedList copiedList = new SinglyLinkedList(); + Node current = head; + + while(current != null){ + copiedList.addNode((T)current.data); + current = current.next; + } + return copiedList; + } + + public void set(Integer index, T valueToSet){ + Node current = head; + + for(int i = 0; i < index; i++){ + current = current.next; + } + current.data = valueToSet; + } + + public void sort(){ + Node current = head; + for(int i = 0; i < size(); i++){ + current = head; + while(current.next != null){ + if(compareTo((T)current.data, (T)current.next.data) > 0){ + T nextVal = (T)current.next.data; + current.next.data = current.data; + current.data = nextVal; + } + current = current.next; + } + } + } + + public SinglyLinkedList slice(int start, int end){ + SinglyLinkedList subList = new SinglyLinkedList(); + + for(int i = 0; i < end; i++){ + if(i >= start) + subList.addNode(get(i)); + } + return subList; + } + + public void reverse(){ + Node orig = head; + Node prev = null; + Node current = null; + + while(orig != null) { + current = orig; + orig = orig.next; + + current.next = prev; + prev = current; + head = current; + } + } + + public int compareTo(T o, T o2) { + return o.compareTo(o2); + } } diff --git a/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java b/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java index 5cc057e..6dc7864 100644 --- a/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java +++ b/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java @@ -1,7 +1,154 @@ package com.zipcodewilmington.singlylinkedlist; +import org.junit.Assert; +import org.junit.Test; + /** * Created by leon on 1/10/18. */ public class SinglyLinkedListTest { + + + @Test + public void testAdd(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode(1); + list.addNode(2); + list.addNode(3); + + Integer expected = 3; + Integer actual = list.size(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testFind(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode("Truck"); + list.addNode("Car"); + list.addNode("Van"); + + Integer expected = 2; + Integer actual = list.find("Van"); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testContains(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode("Truck"); + list.addNode("Car"); + list.addNode("Van"); + + Boolean actual = list.contains("Van"); + + Assert.assertTrue(actual); + } + + @Test + public void testRemove(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode("Truck"); + list.addNode("Car"); + list.addNode("Lame Jeep"); + list.addNode("Car"); + list.addNode("Van"); + + list.remove("Car"); + Integer expected = 3; + Integer actual = list.size(); + list.display(); + Assert.assertEquals(expected, actual); + } + + @Test + public void testGet(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode(10l); + list.addNode(12l); + list.addNode(155l); + list.addNode(100l); + + Long expected = 155l; + Long actual = list.get(2); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testCopy(){ + SinglyLinkedList list = new SinglyLinkedList(); + Float expected = 2.3f; + Float expected2 = 1.8f; + + list.addNode(1.0f); + list.addNode(1.3f); + list.addNode(2.3f); + list.addNode(1.5f); + + SinglyLinkedList copied = list.copy(); + list.set(2, expected2); + + Float actual = copied.get(2); + + Float actual2 = list.get(2); + + Assert.assertEquals(expected, actual); + Assert.assertEquals(expected2, actual2); + } + + @Test + public void testSort(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode(12); + list.addNode(21); + list.addNode(33); + list.addNode(4); + + list.sort(); + + Integer expected = 4; + Integer actual = list.get(0); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testReverse(){ + SinglyLinkedList list = new SinglyLinkedList(); + list.addNode(12); + list.addNode(21); + list.addNode(33); + list.addNode(4); + + list.reverse(); + + Integer expected = 4; + Integer actual = list.get(0); + + list.display(); + + Assert.assertEquals(expected, actual); + } + + @Test + public void testSlice(){ + SinglyLinkedList list = new SinglyLinkedList(); + + list.addNode(12); + list.addNode(21); + list.addNode(33); + list.addNode(4); + list.addNode(3); + list.addNode(100); + + SinglyLinkedList result = list.slice(1, 4); + Integer expected = 3; + Integer actual = result.size(); + + result.display(); + Assert.assertEquals(expected, actual); + } } From 0a624c3352e2c75598f2e2e8980a2d9e12250311 Mon Sep 17 00:00:00 2001 From: Zach Date: Sat, 31 Jul 2021 14:00:24 -0400 Subject: [PATCH 2/2] Fixed error in .remove method that caused first or last element to not be removed properly --- .idea/workspace.xml | 37 +++++++++++++------ .../singlylinkedlist/SinglyLinkedList.java | 19 ++++++++-- .../SinglyLinkedListTest.java | 15 +++++--- 3 files changed, 50 insertions(+), 21 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 83f0b54..0788368 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,13 +5,7 @@ - - - - - - @@ -164,7 +158,7 @@ - + - + @@ -246,7 +240,7 @@ + - + - @@ -400,6 +394,27 @@ + + + + + file://$PROJECT_DIR$/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java + 71 + + + file://$PROJECT_DIR$/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java + 58 + + + + + + + com.zipcodewilmington.singlylinkedlist.* + + diff --git a/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java b/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java index 81bc4b5..6dbacc3 100644 --- a/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java +++ b/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java @@ -28,7 +28,7 @@ public void addNode(T data){ } else { tail.next = newNode; } - tail = newNode; + tail = newNode; //on the first iteration, head and tail mean the same thing } @@ -65,9 +65,16 @@ public Boolean contains(T valueToFind){ public void remove(T valueToFind){ Node current = head; Node last = head; - while(current.next != null){ + while(current != null){ if(current.data.equals(valueToFind)) - last.next = current.next; + if(current.next == null) { + last.next = null; + } else if(current == last){ + head = current.next; + } + else { + last.next = current.next; + } last = current; current = current.next; @@ -116,7 +123,10 @@ public void set(Integer index, T valueToSet){ } current.data = valueToSet; } - + //10 1 + //15 + //2 + //1 public void sort(){ Node current = head; for(int i = 0; i < size(); i++){ @@ -154,6 +164,7 @@ public void reverse(){ current.next = prev; prev = current; head = current; + //this.display(); } } diff --git a/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java b/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java index 6dc7864..fb77fc4 100644 --- a/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java +++ b/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java @@ -56,8 +56,8 @@ public void testRemove(){ list.addNode("Car"); list.addNode("Van"); - list.remove("Car"); - Integer expected = 3; + list.remove("Truck"); + Integer expected = 4; Integer actual = list.size(); list.display(); Assert.assertEquals(expected, actual); @@ -83,16 +83,17 @@ public void testCopy(){ Float expected = 2.3f; Float expected2 = 1.8f; + list.addNode(1.0f); list.addNode(1.3f); list.addNode(2.3f); list.addNode(1.5f); SinglyLinkedList copied = list.copy(); - list.set(2, expected2); - Float actual = copied.get(2); + list.set(2, expected2); //if shallow, thisw would cahnge both lists + Float actual = copied.get(2); Float actual2 = list.get(2); Assert.assertEquals(expected, actual); @@ -105,13 +106,15 @@ public void testSort(){ list.addNode(12); list.addNode(21); list.addNode(33); + list.addNode(1); + list.addNode(200); list.addNode(4); list.sort(); - Integer expected = 4; + Integer expected = 1; Integer actual = list.get(0); - + list.display(); Assert.assertEquals(expected, actual); }