mirror of
https://github.com/TheAlgorithms/Java.git
synced 2026-03-13 08:40:43 +08:00
Add Middle of Linked List (Slow/Fast Pointers) (#7212)
* feat: implement Smooth Sort algorithm with detailed JavaDoc and test class * style: format LEONARDO array for improved readability with clang-format * feat: add MiddleOfLinkedList class and corresponding test cases * docs: update documentation for MiddleOfLinkedList class * test: refactor MiddleOfLinkedListTest to improve readability and assertions * test: refactor MiddleOfLinkedListTest for improved null safety and readability --------- Co-authored-by: Ahmed Allam <60698204+AllamF5J@users.noreply.github.com>
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
package com.thealgorithms.datastructures.lists;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.util.Objects;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class MiddleOfLinkedListTest {
|
||||
|
||||
private static SinglyLinkedListNode listOf(int firstValue, int... remainingValues) {
|
||||
SinglyLinkedListNode head = new SinglyLinkedListNode(firstValue);
|
||||
SinglyLinkedListNode current = head;
|
||||
|
||||
for (int i = 0; i < remainingValues.length; i++) {
|
||||
current.next = new SinglyLinkedListNode(remainingValues[i]);
|
||||
current = current.next;
|
||||
}
|
||||
return head;
|
||||
}
|
||||
|
||||
@Test
|
||||
void middleNodeOddLength() {
|
||||
SinglyLinkedListNode head = listOf(1, 2, 3, 4, 5);
|
||||
SinglyLinkedListNode middle = Objects.requireNonNull(MiddleOfLinkedList.middleNode(head));
|
||||
assertEquals(3, middle.value);
|
||||
}
|
||||
|
||||
@Test
|
||||
void middleNodeEvenLengthReturnsSecondMiddle() {
|
||||
SinglyLinkedListNode head = listOf(1, 2, 3, 4, 5, 6);
|
||||
SinglyLinkedListNode middle = Objects.requireNonNull(MiddleOfLinkedList.middleNode(head));
|
||||
assertEquals(4, middle.value);
|
||||
}
|
||||
|
||||
@Test
|
||||
void middleNodeSingleElement() {
|
||||
SinglyLinkedListNode head = listOf(42);
|
||||
SinglyLinkedListNode middle = Objects.requireNonNull(MiddleOfLinkedList.middleNode(head));
|
||||
assertEquals(42, middle.value);
|
||||
}
|
||||
|
||||
@Test
|
||||
void middleNodeTwoElementsReturnsSecond() {
|
||||
SinglyLinkedListNode head = listOf(10, 20);
|
||||
SinglyLinkedListNode middle = Objects.requireNonNull(MiddleOfLinkedList.middleNode(head));
|
||||
assertEquals(20, middle.value);
|
||||
}
|
||||
|
||||
@Test
|
||||
void middleNodeNullHead() {
|
||||
assertNull(MiddleOfLinkedList.middleNode(null));
|
||||
}
|
||||
|
||||
@Test
|
||||
void middleNodeDoesNotModifyListStructure() {
|
||||
SinglyLinkedListNode first = new SinglyLinkedListNode(1);
|
||||
SinglyLinkedListNode second = new SinglyLinkedListNode(2);
|
||||
SinglyLinkedListNode third = new SinglyLinkedListNode(3);
|
||||
SinglyLinkedListNode fourth = new SinglyLinkedListNode(4);
|
||||
|
||||
first.next = second;
|
||||
second.next = third;
|
||||
third.next = fourth;
|
||||
|
||||
SinglyLinkedListNode middle = Objects.requireNonNull(MiddleOfLinkedList.middleNode(first));
|
||||
assertEquals(3, middle.value);
|
||||
|
||||
assertEquals(second, first.next);
|
||||
assertEquals(third, second.next);
|
||||
assertEquals(fourth, third.next);
|
||||
assertNull(fourth.next);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user