Add tests for SinglyLinkedList (#3913)
This commit is contained in:
parent
a7e76c57a0
commit
2418604f7a
@ -54,6 +54,24 @@ public class SinglyLinkedList extends Node {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the node in the middle of the list
|
||||||
|
* If the length of the list is even then return item number length/2
|
||||||
|
* @return middle node of the list
|
||||||
|
*/
|
||||||
|
public Node middle() {
|
||||||
|
if (head == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Node firstCounter = head;
|
||||||
|
Node secondCounter = firstCounter.next;
|
||||||
|
while (secondCounter != null && secondCounter.next != null) {
|
||||||
|
firstCounter = firstCounter.next;
|
||||||
|
secondCounter = secondCounter.next.next;
|
||||||
|
}
|
||||||
|
return firstCounter;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Swaps nodes of two given values a and b.
|
* Swaps nodes of two given values a and b.
|
||||||
*
|
*
|
||||||
|
@ -0,0 +1,102 @@
|
|||||||
|
package com.thealgorithms.datastructures.lists;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
public class SinglyLinkedListTest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialize a list with natural order values with pre-defined length
|
||||||
|
* @param length
|
||||||
|
* @return linked list with pre-defined number of nodes
|
||||||
|
*/
|
||||||
|
private SinglyLinkedList createSampleList(int length) {
|
||||||
|
List<Node> nodeList = new ArrayList<>();
|
||||||
|
for (int i = 1; i <= length; i++) {
|
||||||
|
Node node = new Node(i);
|
||||||
|
nodeList.add(node);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < length - 1; i++) {
|
||||||
|
nodeList.get(i).next = nodeList.get(i+1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return new SinglyLinkedList(nodeList.get(0), length);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void detectLoop() {
|
||||||
|
//List has cycle
|
||||||
|
Node firstNode = new Node(1);
|
||||||
|
Node secondNode = new Node(2);
|
||||||
|
Node thirdNode = new Node(3);
|
||||||
|
Node fourthNode = new Node(4);
|
||||||
|
|
||||||
|
firstNode.next = secondNode;
|
||||||
|
secondNode.next = thirdNode;
|
||||||
|
thirdNode.next = fourthNode;
|
||||||
|
fourthNode.next = firstNode;
|
||||||
|
|
||||||
|
SinglyLinkedList listHasLoop = new SinglyLinkedList(firstNode, 4);
|
||||||
|
assertTrue(listHasLoop.detectLoop());
|
||||||
|
|
||||||
|
SinglyLinkedList listHasNoLoop = createSampleList(5);
|
||||||
|
assertFalse(listHasNoLoop.detectLoop());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void middle() {
|
||||||
|
int oddNumberOfNode = 7;
|
||||||
|
SinglyLinkedList list = createSampleList(oddNumberOfNode);
|
||||||
|
assertEquals(oddNumberOfNode/2 + 1, list.middle().value);
|
||||||
|
int evenNumberOfNode = 8;
|
||||||
|
list = createSampleList(evenNumberOfNode);
|
||||||
|
assertEquals(evenNumberOfNode/2, list.middle().value);
|
||||||
|
|
||||||
|
//return null if empty
|
||||||
|
list = new SinglyLinkedList();
|
||||||
|
assertNull(list.middle());
|
||||||
|
|
||||||
|
//return head if there is only one node
|
||||||
|
list = createSampleList(1);
|
||||||
|
assertEquals(list.getHead(), list.middle());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void swap() {
|
||||||
|
SinglyLinkedList list = createSampleList(5);
|
||||||
|
assertEquals(1, list.getHead().value);
|
||||||
|
assertEquals(5, list.getNth(4));
|
||||||
|
list.swapNodes(1,5);
|
||||||
|
assertEquals(5, list.getHead().value);
|
||||||
|
assertEquals(1, list.getNth(4));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void clear() {
|
||||||
|
SinglyLinkedList list = createSampleList(5);
|
||||||
|
assertEquals(5, list.size());
|
||||||
|
list.clear();
|
||||||
|
assertEquals(0, list.size());
|
||||||
|
assertTrue(list.isEmpty());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void search() {
|
||||||
|
SinglyLinkedList list = createSampleList(10);
|
||||||
|
assertTrue(list.search(5));
|
||||||
|
assertFalse(list.search(20));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void deleteNth() {
|
||||||
|
SinglyLinkedList list = createSampleList(10);
|
||||||
|
assertTrue(list.search(7));
|
||||||
|
list.deleteNth(6); //Index 6 has value 7
|
||||||
|
assertFalse(list.search(7));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user