Skip to content

Commit d4a13fc

Browse files
authored
Enhance docs, remove main, add tests in `SearchSinglyLink… (#6012)
1 parent 985c1f9 commit d4a13fc

File tree

3 files changed

+123
-17
lines changed

3 files changed

+123
-17
lines changed

DIRECTORY.md

+3
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,7 @@
520520
* [LowestBasePalindrome](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/LowestBasePalindrome.java)
521521
* [Luhn](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/Luhn.java)
522522
* [Mandelbrot](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/Mandelbrot.java)
523+
* [MaximumSlidingWindow](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/MaximumSlidingWindow.java)
523524
* [MaximumSumOfDistinctSubarraysWithLengthK](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/MaximumSumOfDistinctSubarraysWithLengthK.java)
524525
* [MemoryManagementAlgorithms](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/MemoryManagementAlgorithms.java)
525526
* [MiniMaxAlgorithm](https://github.com/TheAlgorithms/Java/blob/master/src/main/java/com/thealgorithms/others/MiniMaxAlgorithm.java)
@@ -887,6 +888,7 @@
887888
* [QuickSortLinkedListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/QuickSortLinkedListTest.java)
888889
* [ReverseKGroupTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/ReverseKGroupTest.java)
889890
* [RotateSinglyLinkedListsTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/RotateSinglyLinkedListsTest.java)
891+
* [SearchSinglyLinkedListRecursionTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/SearchSinglyLinkedListRecursionTest.java)
890892
* [SinglyLinkedListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/SinglyLinkedListTest.java)
891893
* [SkipListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/SkipListTest.java)
892894
* [SortedLinkedListTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/datastructures/lists/SortedLinkedListTest.java)
@@ -1151,6 +1153,7 @@
11511153
* [LineSweepTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/LineSweepTest.java)
11521154
* [LinkListSortTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/LinkListSortTest.java)
11531155
* [LowestBasePalindromeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/LowestBasePalindromeTest.java)
1156+
* [MaximumSlidingWindowTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/MaximumSlidingWindowTest.java)
11541157
* [MaximumSumOfDistinctSubarraysWithLengthKTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/MaximumSumOfDistinctSubarraysWithLengthKTest.java)
11551158
* [NewManShanksPrimeTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/NewManShanksPrimeTest.java)
11561159
* [NextFitTest](https://github.com/TheAlgorithms/Java/blob/master/src/test/java/com/thealgorithms/others/NextFitTest.java)

src/main/java/com/thealgorithms/datastructures/lists/SearchSinglyLinkedListRecursion.java

+31-17
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,45 @@
11
package com.thealgorithms.datastructures.lists;
22

3+
/**
4+
* The SearchSinglyLinkedListRecursion class extends SinglyLinkedList and provides
5+
* a method to search for a value in a singly linked list using recursion.
6+
* <p>
7+
* This class demonstrates a recursive approach to check if a given integer value is
8+
* present in the linked list. The search method calls a private recursive helper method
9+
* `searchRecursion`, which checks each node's value and moves to the next node if necessary.
10+
* </p>
11+
* <p>
12+
* Example:
13+
* Given a list containing the values 1 -> 2 -> 3 -> 4, calling search(3) will return `true`,
14+
* while calling search(5) will return `false`.
15+
* </p>
16+
* <p>
17+
* Complexity:
18+
* <ul>
19+
* <li>Time Complexity: O(n), where n is the number of nodes in the linked list.</li>
20+
* <li>Space Complexity: O(n), due to the recursive call stack in the worst case.</li>
21+
* </ul>
22+
* </p>
23+
*/
324
public class SearchSinglyLinkedListRecursion extends SinglyLinkedList {
425

5-
public static void main(String[] args) {
6-
SearchSinglyLinkedListRecursion list = new SearchSinglyLinkedListRecursion();
7-
for (int i = 1; i <= 10; ++i) {
8-
list.insert(i);
9-
}
10-
11-
for (int i = 1; i <= 10; ++i) {
12-
assert list.search(i);
13-
}
14-
assert !list.search(-1) && !list.search(100);
15-
}
16-
1726
/**
18-
* Test if the value key is present in the list using recursion.
27+
* Recursively searches for a given value in the linked list.
1928
*
20-
* @param node the head node.
21-
* @param key the value to be searched.
22-
* @return {@code true} if key is present in the list, otherwise
23-
* {@code false}.
29+
* @param node the head node to start the search.
30+
* @param key the integer value to be searched for.
31+
* @return {@code true} if the value `key` is present in the list; otherwise, {@code false}.
2432
*/
2533
private boolean searchRecursion(Node node, int key) {
2634
return (node != null && (node.value == key || searchRecursion(node.next, key)));
2735
}
2836

37+
/**
38+
* Public search method to determine if a key is present in the linked list.
39+
*
40+
* @param key the integer value to be searched for.
41+
* @return {@code true} if the value `key` is present in the list; otherwise, {@code false}.
42+
*/
2943
@Override
3044
public boolean search(int key) {
3145
return searchRecursion(getHead(), key);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
package com.thealgorithms.datastructures.lists;
2+
3+
import static org.junit.jupiter.api.Assertions.assertFalse;
4+
import static org.junit.jupiter.api.Assertions.assertTrue;
5+
6+
import org.junit.jupiter.api.BeforeEach;
7+
import org.junit.jupiter.api.Test;
8+
9+
public class SearchSinglyLinkedListRecursionTest {
10+
11+
private SearchSinglyLinkedListRecursion list;
12+
13+
@BeforeEach
14+
public void setUp() {
15+
list = new SearchSinglyLinkedListRecursion();
16+
}
17+
18+
@Test
19+
public void testSearchInEmptyList() {
20+
// Test searching for a value in an empty list (should return false)
21+
assertFalse(list.search(1));
22+
}
23+
24+
@Test
25+
public void testSearchSingleElementListFound() {
26+
// Insert a single element and search for it
27+
list.insert(5);
28+
assertTrue(list.search(5));
29+
}
30+
31+
@Test
32+
public void testSearchSingleElementListNotFound() {
33+
// Insert a single element and search for a non-existent value
34+
list.insert(5);
35+
assertFalse(list.search(10));
36+
}
37+
38+
@Test
39+
public void testSearchMultipleElementsListFound() {
40+
// Insert multiple elements and search for a middle value
41+
for (int i = 1; i <= 10; i++) {
42+
list.insert(i);
43+
}
44+
assertTrue(list.search(5));
45+
}
46+
47+
@Test
48+
public void testSearchMultipleElementsListFirstElement() {
49+
// Insert multiple elements and search for the first element
50+
for (int i = 1; i <= 10; i++) {
51+
list.insert(i);
52+
}
53+
assertTrue(list.search(1));
54+
}
55+
56+
@Test
57+
public void testSearchMultipleElementsListLastElement() {
58+
// Insert multiple elements and search for the last element
59+
for (int i = 1; i <= 10; i++) {
60+
list.insert(i);
61+
}
62+
assertTrue(list.search(10));
63+
}
64+
65+
@Test
66+
public void testSearchMultipleElementsListNotFound() {
67+
// Insert multiple elements and search for a non-existent element
68+
for (int i = 1; i <= 10; i++) {
69+
list.insert(i);
70+
}
71+
assertFalse(list.search(15));
72+
}
73+
74+
@Test
75+
public void testSearchNegativeValues() {
76+
// Insert positive and negative values and search for a negative value
77+
list.insert(-5);
78+
list.insert(-10);
79+
list.insert(5);
80+
assertTrue(list.search(-10));
81+
assertFalse(list.search(-3));
82+
}
83+
84+
@Test
85+
public void testSearchZeroValue() {
86+
list.insert(0);
87+
assertTrue(list.search(0));
88+
}
89+
}

0 commit comments

Comments
 (0)