GeezerVison is showing github.com — algorithm: find the middle of linked-list (#1096) · Algorithms-Learn/JavaScript@6ad2467
File treeExpand file treeCollapse file tree Open diff view settings Data-Structures/Linked-List
Expand file treeCollapse file tree Open diff view settings Collapse file Copy file name to clipboardExpand all lines: Data-Structures/Linked-List/SinglyLinkedList.js +14-1Lines changed: 14 additions & 1 deletion | Original file line number | Diff line number | Diff line change |
|---|
| 6 | 6 | * a singly linked list. | 7 | 7 | */ | 8 | 8 |
| 9 | | -// Methods - size, head, addLast, addFirst, addAt, removeFirst, removeLast, remove, removeAt, indexOf, isEmpty, elementAt, get, clean | | 9 | +// Methods - size, head, addLast, addFirst, addAt, removeFirst, removeLast, remove, removeAt, indexOf, isEmpty, elementAt, findMiddle, get, clean | 10 | 10 |
| 11 | 11 | class Node { | 12 | 12 | constructor (data) { | @@ -193,6 +193,19 @@ class LinkedList { | 193 | 193 | return removedNode.data | 194 | 194 | } | 195 | 195 |
| | 196 | + // Returns a reference to middle node of linked list | | 197 | + findMiddle () { | | 198 | + // If there are two middle nodes, return the second middle node. | | 199 | + let fast = this.headNode | | 200 | + let slow = this.headNode | | 201 | + | | 202 | + while (fast !== null && fast.next !== null) { | | 203 | + fast = fast.next.next | | 204 | + slow = slow.next | | 205 | + } | | 206 | + return slow | | 207 | + } | | 208 | + | 196 | 209 | // make the linkedList Empty | 197 | 210 | clean () { | 198 | 211 | this.headNode = null | |
Collapse file Copy file name to clipboardExpand all lines: Data-Structures/Linked-List/test/SinglyLinkedList.test.js +23Lines changed: 23 additions & 0 deletions | Original file line number | Diff line number | Diff line change |
|---|
@@ -164,6 +164,29 @@ describe('SinglyLinkedList', () => { | 164 | 164 | expect(list.size()).toBe(1) | 165 | 165 | }) | 166 | 166 |
| | 167 | + it('Middle node of linked list', () => { | | 168 | + const list = new LinkedList() | | 169 | + list.addFirst(1) | | 170 | + | | 171 | + // Middle node for list having single node | | 172 | + expect(list.findMiddle().data).toEqual(1) | | 173 | + | | 174 | + list.addLast(2) | | 175 | + list.addLast(3) | | 176 | + list.addLast(4) | | 177 | + list.addLast(5) | | 178 | + list.addLast(6) | | 179 | + list.addLast(7) | | 180 | + | | 181 | + // Middle node for list having odd number of nodes | | 182 | + expect(list.findMiddle().data).toEqual(4) | | 183 | + | | 184 | + list.addLast(10) | | 185 | + | | 186 | + // Middle node for list having even number of nodes | | 187 | + expect(list.findMiddle().data).toEqual(5) | | 188 | + }) | | 189 | + | 167 | 190 | it('Check Iterator', () => { | 168 | 191 | const list = new LinkedList() | 169 | 192 |
| |
|