File tree Expand file tree Collapse file tree 2 files changed +75
-0
lines changed
Data-Structures/Linked-List Expand file tree Collapse file tree 2 files changed +75
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ Problem Statement:
3+ Given a non-empty singly linked list, find the middle node.
4+ If there are two middle nodes, return the second middle node.
5+
6+ Link for the Problem: https://leetcode.com/problems/middle-of-the-linked-list/
7+ */
8+
9+ class FindMiddleNode {
10+ constructor ( ) {
11+ this . head = null
12+ }
13+
14+ // Method to find and return the middle node of the linked list
15+ findMiddle ( head ) {
16+ let slow = head
17+ let fast = head
18+
19+ while ( fast !== null && fast . next !== null ) {
20+ slow = slow . next // Move slow by 1 step
21+ fast = fast . next . next // Move fast by 2 steps
22+ }
23+
24+ return slow // Slow will be at the middle node
25+ }
26+
27+ // Convert list to array for easy checking in test cases
28+ solutionToArray ( node ) {
29+ const list = [ ]
30+ let currentNode = node
31+ while ( currentNode ) {
32+ list . push ( currentNode . data )
33+ currentNode = currentNode . next
34+ }
35+
36+ return list
37+ }
38+ }
39+
40+ export { FindMiddleNode }
Original file line number Diff line number Diff line change 1+ import { FindMiddleNode } from '../FindMiddleNode.js'
2+ import { LinkedList } from '../SinglyLinkedList.js'
3+
4+ describe ( 'FindMiddleNode' , ( ) => {
5+ it ( 'Check Middle Node of Linked List' , ( ) => {
6+ const list = new LinkedList ( )
7+ list . addFirst ( 1 )
8+ list . addLast ( 2 )
9+ list . addLast ( 3 )
10+ list . addLast ( 4 )
11+ list . addLast ( 5 )
12+
13+ const findMiddleNode = new FindMiddleNode ( )
14+ const middleNode = findMiddleNode . findMiddle ( list . headNode )
15+
16+ // Convert the node and its following nodes to an array for verification
17+ expect ( findMiddleNode . solutionToArray ( middleNode ) ) . toEqual ( [ 3 , 4 , 5 ] )
18+ } )
19+
20+ it ( 'Check Middle Node for Even Number of Elements' , ( ) => {
21+ const list = new LinkedList ( )
22+ list . addFirst ( 1 )
23+ list . addLast ( 2 )
24+ list . addLast ( 3 )
25+ list . addLast ( 4 )
26+ list . addLast ( 5 )
27+ list . addLast ( 6 )
28+
29+ const findMiddleNode = new FindMiddleNode ( )
30+ const middleNode = findMiddleNode . findMiddle ( list . headNode )
31+
32+ // For even-length lists, the second middle node is returned
33+ expect ( findMiddleNode . solutionToArray ( middleNode ) ) . toEqual ( [ 4 , 5 , 6 ] )
34+ } )
35+ } )
You can’t perform that action at this time.
0 commit comments