Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 8d2f7e2

Browse files
876: Middle of the Linked List
1 parent a24d4e8 commit 8d2f7e2

File tree

4 files changed

+87
-0
lines changed

4 files changed

+87
-0
lines changed

‎README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ My solutions to LeetCode problems in Kotlin.
2424
| [412](https://leetcode.com/problems/fizz-buzz/) | [Fizz Buzz](src/main/kotlin/com/schmoczer/leetcode/_0412/FizzBuzz.kt) | Easy |
2525
| [773](https://leetcode.com/problems/sliding-puzzle/) | [Sliding Puzzle](src/main/kotlin/com/schmoczer/leetcode/_0773/SlidingPuzzle.kt) | Hard |
2626
| [796](https://leetcode.com/problems/rotate-string/) | [Rotate String](src/main/kotlin/com/schmoczer/leetcode/_0796/RotateString.kt) | Easy |
27+
| [876](https://leetcode.com/problems/middle-of-the-linked-list/) | [Middle of the Linked List](src/main/kotlin/com/schmoczer/leetcode/_0876/MiddleOfTheLinkedList.kt) | Easy |
2728
| [1342](https://leetcode.com/problems/number-of-steps-to-reduce-a-number-to-zero/) | [Number of Steps to Reduce a Number to Zero](src/main/kotlin/com/schmoczer/leetcode/_1342/NumberOfStepsToReduceANumberToZero.kt) | Easy |
2829
| [1480](https://leetcode.com/problems/running-sum-of-1d-array/) | [Running Sum of 1d Array](src/main/kotlin/com/schmoczer/leetcode/_1480/RunningSumOf1dArray.kt) | Easy |
2930
| [1574](https://leetcode.com/problems/shortest-subarray-to-be-removed-to-make-array-sorted/) | [Shortest Subarray to be Removed to Make Array Sorted](src/main/kotlin/com/schmoczer/leetcode/_1574/ShortestSubarray.kt) | Medium |
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.schmoczer.leetcode._0876
2+
3+
class MiddleOfTheLinkedList {
4+
// Approach: use a fast and a slow pointer. Runtime 0ms Beats 100.00%
5+
fun middleNode(head: ListNode?): ListNode? {
6+
var current = head?.next
7+
var middle = head
8+
while (current != null) {
9+
current = current.next?.next
10+
middle = middle?.next
11+
}
12+
return middle
13+
}
14+
}
15+
16+
class ListNode(var `val`: Int) {
17+
var next: ListNode? = null
18+
19+
constructor(`val`: Int, next: ListNode?) : this(`val`) {
20+
this.next = next
21+
}
22+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Middle of the Linked List
2+
3+
Given the `head` of a singly linked list, return the middle node of the linked list.
4+
5+
If there are two middle nodes, return the second middle node.
6+
7+
Example 1:
8+
9+
> Input: head = [1,2,3,4,5]
10+
>
11+
> Output: [3,4,5]
12+
13+
Example 2:
14+
15+
> Input: head = [1,2,3,4,5,6]
16+
>
17+
> Output: [4,5,6]
18+
19+
Constraints:
20+
21+
- The number of nodes in the list is in the range `[1, 100]`.
22+
- `1 <= Node.val <= 100`
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.schmoczer.leetcode._0876
2+
3+
import org.junit.jupiter.api.Assertions.assertEquals
4+
import org.junit.jupiter.api.BeforeEach
5+
import kotlin.test.Test
6+
7+
class MiddleOfTheLinkedListTest {
8+
private lateinit var sut: MiddleOfTheLinkedList
9+
10+
@BeforeEach
11+
fun setUp() {
12+
sut = MiddleOfTheLinkedList()
13+
}
14+
15+
@Test
16+
fun `middle of 1,2,3,4,5 is 3`() {
17+
val input = createLinkedList(1, 2, 3, 4, 5)
18+
val expected = 3
19+
20+
val result = sut.middleNode(input)
21+
22+
assertEquals(expected, result?.`val`)
23+
}
24+
25+
@Test
26+
fun `middle of 1,2,3,4,5,6 is 4`() {
27+
val input = createLinkedList(1, 2, 3, 4, 5, 6)
28+
val expected = 4
29+
30+
val result = sut.middleNode(input)
31+
32+
assertEquals(expected, result?.`val`)
33+
}
34+
35+
private fun createLinkedList(vararg list: Int): ListNode {
36+
var node = ListNode(list.last())
37+
for (i in (0..<(list.size - 1)).reversed()) {
38+
node = ListNode(list[i], node)
39+
}
40+
return node
41+
}
42+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /