Skip to content

Commit e971116

Browse files
committed
Linked Lists: Middle of the Linked List
1 parent 0c7b8b9 commit e971116

File tree

3 files changed

+51
-4
lines changed

3 files changed

+51
-4
lines changed

Diff for: README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@
2020
- [x] [Jewels and Stones](./src/hashing/jewels-and-stones.ts)
2121
- [x] [Longest Substring Without Repeating Characters](./src/hashing/longest-substring-without-repeating-characters.ts)
2222
- [ ] Linked Lists
23-
- [ ] [Middle of the Linked List](./src/linked-lists/middle-of-the-linked-list.ts)
23+
- [x] [Middle of the Linked List](./src/linked-lists/middle-of-the-linked-list.ts)
2424
- [ ] [Remove Duplicates from Sorted List](./src/linked-lists/remove-duplicates-from-sorted-list.ts)
2525
- [ ] [Reverse Linked List II](./src/linked-lists/reverse-linked-list-ii.ts)
2626
- [ ] Stacks and Queues

Diff for: src/linked-lists/middle-of-the-linked-list.ts

+20-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,20 @@
1-
export function () {}
1+
export class ListNode {
2+
val: number;
3+
next: ListNode | null;
4+
constructor(val?: number, next?: ListNode | null) {
5+
this.val = val === undefined ? 0 : val;
6+
this.next = next === undefined ? null : next;
7+
}
8+
}
9+
10+
export function middleNode(head: ListNode | null): ListNode | null {
11+
let slow = head;
12+
let fast = head;
13+
14+
while (fast && fast.next) {
15+
slow = slow!.next;
16+
fast = fast.next.next;
17+
}
18+
19+
return slow;
20+
}

Diff for: tests/linked-lists/middle-of-the-linked-list.test.ts

+30-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,31 @@
1-
import {} from '@/linked-lists/middle-of-the-linked-list.js';
1+
import {
2+
ListNode,
3+
middleNode,
4+
} from '@/linked-lists/middle-of-the-linked-list.js';
25

3-
describe.todo('Linked Lists: Middle of the Linked List')
6+
describe('Linked Lists: Middle of the Linked List', () => {
7+
test.each([
8+
{
9+
head: new ListNode(
10+
1,
11+
new ListNode(2, new ListNode(3, new ListNode(4, new ListNode(5, null))))
12+
),
13+
output: new ListNode(3, new ListNode(4, new ListNode(5, null))),
14+
},
15+
{
16+
head: new ListNode(
17+
1,
18+
new ListNode(
19+
2,
20+
new ListNode(
21+
3,
22+
new ListNode(4, new ListNode(5, new ListNode(6, null)))
23+
)
24+
)
25+
),
26+
output: new ListNode(4, new ListNode(5, new ListNode(6, null))),
27+
},
28+
])('middleNode($head) === $output', ({ head, output }) => {
29+
expect(middleNode(head)).toStrictEqual(output);
30+
});
31+
});

0 commit comments

Comments
 (0)