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__com_beust_jcommander_1_78.xml b/.idea/libraries/Maven__com_beust_jcommander_1_78.xml new file mode 100644 index 0000000..788fa16 --- /dev/null +++ b/.idea/libraries/Maven__com_beust_jcommander_1_78.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml new file mode 100644 index 0000000..d411041 --- /dev/null +++ b/.idea/libraries/Maven__junit_junit_4_12.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_1.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_1.xml new file mode 100644 index 0000000..f555713 --- /dev/null +++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_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/libraries/Maven__org_jetbrains_annotations_13_0.xml b/.idea/libraries/Maven__org_jetbrains_annotations_13_0.xml new file mode 100644 index 0000000..e2c8297 --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_annotations_13_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_4_20.xml b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_4_20.xml new file mode 100644 index 0000000..70c9b42 --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_1_4_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_20.xml b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_20.xml new file mode 100644 index 0000000..24afaa1 --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_20.xml b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_20.xml new file mode 100644 index 0000000..0af2311 --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_20.xml b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_20.xml new file mode 100644 index 0000000..3d09f6a --- /dev/null +++ b/.idea/libraries/Maven__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_20.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_0_M1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_0_M1.xml new file mode 100644 index 0000000..f0982aa --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_0_M1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_0_M1.xml new file mode 100644 index 0000000..6ba70f1 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_0_M1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_0_M1.xml new file mode 100644 index 0000000..467a7b6 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_0_M1.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_0_M1.xml new file mode 100644 index 0000000..d33fe56 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_0_M1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_0_M1.xml new file mode 100644 index 0000000..1332c3d --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_0_M1.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_0_M1.xml new file mode 100644 index 0000000..4e2a10f --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_0_M1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml new file mode 100644 index 0000000..fbc1b16 --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_testng_testng_7_4_0.xml b/.idea/libraries/Maven__org_testng_testng_7_4_0.xml new file mode 100644 index 0000000..077b7c7 --- /dev/null +++ b/.idea/libraries/Maven__org_testng_testng_7_4_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_webjars_jquery_3_5_1.xml b/.idea/libraries/Maven__org_webjars_jquery_3_5_1.xml new file mode 100644 index 0000000..b1ee78f --- /dev/null +++ b/.idea/libraries/Maven__org_webjars_jquery_3_5_1.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..8cac2b9 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -1,86 +1,19 @@ + + - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ 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..6e5a5c7 100644 --- a/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java +++ b/src/main/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedList.java @@ -1,7 +1,189 @@ package com.zipcodewilmington.singlylinkedlist; + +import sun.lwawt.macosx.CSystemTray; + /** * Created by leon on 1/10/18. */ public class SinglyLinkedList { + + class Node { + Object data; + Node next; + + public Node(Object data) { + this.data = data; + this.next = null; + } + + } + + public Node head = null; + public Node tail = null; + + public void add(Object data) { + Node newNode = new Node(data); + if (head == null) { + head = newNode; + + } else { + tail.next = newNode; + } + tail = newNode; + } + + public void remove(Integer index) { // REFACTOR TO RETURN TYPE VOID + Node current = this.head; + Node previous = null; + + if (index == 0 && current != null) { // [head] -> [current] -> [current.next] -> [tail] + this.head = current.next; + } + int counter = 0; + while(current != null) { + if(counter == index) { + previous.next = current.next; + break; + } else { + previous = current; + current = current.next; + counter++; + } + } + if(current == null) { + System.out.println("not found"); + } +// Node current = head; +// Node nextPoint = head.next; +// int tracker = 0; +// if(index.equals(tracker)) { +// head = current.next; +// return; +// } +// tracker++; +// while(true) { +// tracker++; +// current = nextPoint; +// nextPoint = current.next; +// if(index.equals(tracker)) { +// current.next = nextPoint.next; +// if(nextPoint.next == null) { +// current.next = null; +// tail = current; +// } +// } +// } + + } + + public Boolean contains(Object data) { + Node current = head; + while (current != null) { + if (current.data == data){ + return true; + } + current = current.next; + } + return false; + } + + public Object find(Object data) { + Node current = head; + int index = 0; + while (current != null) { + if (current.data == data) { + return index; + } + index++; + current = current.next; + } + return -1; + } + + public Integer size() { + Integer counter = 0; + Node current = head; + while (current != null) { + counter++; + current = current.next; + } + return counter; + } + + public Object get(Integer index) { + Node current = head; + int counter = 0; + while(current != null) { + if (counter == index) { + return current.data; + } + counter++; + current = current.next; + } + return -1; + } + + public SinglyLinkedList copy() { + SinglyLinkedList newList = new SinglyLinkedList(); + Node current = head; + while(current != null) { + newList.add(current.data); + current = current.next; + } + return newList; + } + + + public void sort() { + Node current = head; + for(int i = 0; i < size(); i++) { + while(current.next != null) { + Node next = current.next; + if((Integer) current.data > (Integer) next.data) { + Object temp = current.data; + current.data = next.data; + next.data = temp; + } + current = current.next; + } + } + } + } + + +//>{ + + +// class Node { +// SomeType data; +// Node next; +// +// public Node(SomeType data) { +// this.data = data; +// this.next = null; +// } +// } +// +// public Node head = null; +// public Node tail = null; +// +// public void add(SomeType data) { +// Node newNode = new Node(data); +// if(head == null) { +// head = newNode; +// +// } else { +// tail.next = newNode; +// } +// tail = newNode; +// } +// +// public void remove(SomeType data) { +// Node newNode = new Node(data); +// +// } + + + diff --git a/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java b/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java index 5cc057e..24b2c4e 100644 --- a/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java +++ b/src/test/java/com/zipcodewilmington/singlylinkedlist/SinglyLinkedListTest.java @@ -1,7 +1,133 @@ 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() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(1); + singlyLinkedList.add(2); + Integer expected = 2; + // When + Integer actual = singlyLinkedList.size(); + + // Then + Assert.assertEquals(expected, actual); + } + + @Test + public void testRemove() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(1); + singlyLinkedList.add(2); + // When + singlyLinkedList.remove(1); + Integer expectedSize = 1; + Integer actualSize = singlyLinkedList.size(); + // Then + Assert.assertEquals(expectedSize,actualSize); + } + + @Test + public void testContains() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add("one"); + singlyLinkedList.add("two"); + Boolean expected = true; + // When + Boolean actual = singlyLinkedList.contains("one"); + // Then + Assert.assertEquals(expected, actual); + } + + @Test + public void testFind() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(1); + singlyLinkedList.add(2); + singlyLinkedList.add(3); + Integer expectedIndex = 2; + // When + Object actualIndex = singlyLinkedList.find(3); + // Then + Assert.assertEquals(expectedIndex,actualIndex); + } + + @Test + public void testSize() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(1); + singlyLinkedList.add(2); + // When + Integer expectedSize = 2; + Integer actualSize = singlyLinkedList.size(); + // Then + Assert.assertEquals(expectedSize,actualSize); + } + + @Test + public void testGet() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(1); + singlyLinkedList.add(2); + singlyLinkedList.add(3); + + // When + Integer expectedElement = 2; + Integer actualElement = (Integer) singlyLinkedList.get(1); + + // Then + Assert.assertEquals(expectedElement, actualElement); + + } + + @Test + public void testCopy() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(1); + singlyLinkedList.add(2); + singlyLinkedList.add(3); + + // When + SinglyLinkedList newList = singlyLinkedList.copy(); + int singleSize = singlyLinkedList.size(); + int newListSize = newList.size(); + + // Then + Assert.assertEquals(singleSize, newListSize); + } + + @Test + public void testSort() { + // Given + SinglyLinkedList singlyLinkedList = new SinglyLinkedList(); + singlyLinkedList.add(2); + singlyLinkedList.add(1); + singlyLinkedList.add(3); + singlyLinkedList.add(5); + singlyLinkedList.add(4); + singlyLinkedList.add(6); + + // When + singlyLinkedList.sort(); + + // Then + Assert.assertTrue(singlyLinkedList.find(1).equals(0)); + Assert.assertTrue(singlyLinkedList.find(2).equals(1)); + Assert.assertTrue(singlyLinkedList.find(3).equals(2)); + } }