Skip to content

Commit 56de9cc

Browse files
committed
Refactor ListNode
1 parent 09eafb9 commit 56de9cc

File tree

4 files changed

+29
-80
lines changed

4 files changed

+29
-80
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package io.github.juchanei.leetcodeJava
2+
3+
data class ListNode(val `val`: Int, var next: ListNode?)
4+
5+
fun List<Int>.toListNode(): ListNode? =
6+
if (isEmpty()) null else ListNode(first(), drop(1).toListNode())
7+
8+
fun ListNode?.toList(): List<Int> {
9+
val result = mutableListOf<Int>()
10+
11+
var node: ListNode? = this
12+
while (true) {
13+
if (node == null) break
14+
result.add(node.`val`)
15+
node = node.next
16+
}
17+
18+
return result
19+
}
20+
21+
fun ListNode.reversed(): ListNode = reverse(this)
22+
23+
tailrec fun reverse(head: ListNode, acc: ListNode? = null): ListNode =
24+
if (head.next == null) {
25+
ListNode(head.`val`, acc)
26+
} else {
27+
reverse(head.next as ListNode, ListNode(head.`val`, acc))
28+
}

jvm/src/main/java/io/github/juchanei/leetcodeJava/MergeTwoSortedLists.kt

-28
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import org.junit.jupiter.api.Test
55

66
// https://leetcode.com/explore/interview/card/top-interview-questions-easy/93/linked-list/771/
77
class MergeTwoSortedLists {
8-
data class ListNode(val `val`: Int, val next: ListNode?)
9-
108
fun mergeTwoLists(list1: ListNode?, list2: ListNode?): ListNode? =
119
mergeTwoLists(list1, list2, null)?.reversed()
1210

@@ -24,15 +22,6 @@ class MergeTwoSortedLists {
2422
mergeTwoLists(list1?.next, list2?.next, ListNode(value, acc))
2523
}
2624

27-
private fun ListNode.reversed(): ListNode = reverse(this)
28-
29-
private tailrec fun reverse(head: ListNode, acc: ListNode? = null): ListNode =
30-
if (head.next == null) {
31-
ListNode(head.`val`, acc)
32-
} else {
33-
reverse(head.next, ListNode(head.`val`, acc))
34-
}
35-
3625
@Test
3726
fun example1() {
3827
val l1 = listOf(1, 2, 4)
@@ -76,21 +65,4 @@ class MergeTwoSortedLists {
7665

7766
then(actual.toList()).isEqualTo(expected)
7867
}
79-
private fun List<Int>.toListNode(): ListNode? {
80-
if (isEmpty()) return null
81-
return ListNode(first(), drop(1).toListNode())
82-
}
83-
84-
private fun ListNode?.toList(): List<Int> {
85-
val result = mutableListOf<Int>()
86-
87-
var node: ListNode? = this
88-
while (true) {
89-
if (node == null) break
90-
result.add(node.`val`)
91-
node = node.next
92-
}
93-
94-
return result
95-
}
9668
}

jvm/src/main/java/io/github/juchanei/leetcodeJava/RemoveNthNodeFromEndOfList.kt

-20
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import org.junit.jupiter.api.Test
55

66
// https://leetcode.com/explore/interview/card/top-interview-questions-easy/93/linked-list/603/
77
class RemoveNthNodeFromEndOfList {
8-
class ListNode(var `val`: Int, var next: ListNode? = null)
9-
108
fun removeNthFromEnd(head: ListNode?, n: Int): ListNode? {
119
if (head == null) return null
1210

@@ -75,22 +73,4 @@ class RemoveNthNodeFromEndOfList {
7573

7674
then(actual.toList()).isEqualTo(listOf(2))
7775
}
78-
79-
private fun List<Int>.toListNode(): ListNode? {
80-
if (isEmpty()) return null
81-
return ListNode(first(), drop(1).toListNode())
82-
}
83-
84-
private fun ListNode?.toList(): List<Int> {
85-
val result = mutableListOf<Int>()
86-
87-
var node: ListNode? = this
88-
while (true) {
89-
if (node == null) break
90-
result.add(node.`val`)
91-
node = node.next
92-
}
93-
94-
return result
95-
}
9676
}

jvm/src/main/java/io/github/juchanei/leetcodeJava/ReverseLinkedList.kt

+1-32
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,7 @@ import org.junit.jupiter.api.Test
55

66
// https://leetcode.com/explore/interview/card/top-interview-questions-easy/93/linked-list/560/
77
class ReverseLinkedList {
8-
data class ListNode(val `val`: Int, val next: ListNode?)
9-
10-
fun reverseList(head: ListNode?): ListNode? =
11-
reverseList(head = head, acc = null)
12-
13-
private tailrec fun reverseList(head: ListNode?, acc: ListNode?): ListNode? =
14-
if (head == null) {
15-
acc
16-
} else {
17-
reverseList(
18-
head = head.next,
19-
acc = ListNode(head.`val`, acc)
20-
)
21-
}
8+
fun reverseList(head: ListNode?): ListNode? = head?.reversed()
229

2310
@Test
2411
fun example1() {
@@ -55,22 +42,4 @@ class ReverseLinkedList {
5542

5643
then(actual.toList()).isEqualTo(l.reversed())
5744
}
58-
59-
private fun List<Int>.toListNode(): ListNode? {
60-
if (isEmpty()) return null
61-
return ListNode(first(), drop(1).toListNode())
62-
}
63-
64-
private fun ListNode?.toList(): List<Int> {
65-
val result = mutableListOf<Int>()
66-
67-
var node: ListNode? = this
68-
while (true) {
69-
if (node == null) break
70-
result.add(node.`val`)
71-
node = node.next
72-
}
73-
74-
return result
75-
}
7645
}

0 commit comments

Comments
 (0)