【发布时间】:2022-01-13 17:01:10
【问题描述】:
只是想知道是否有人可以帮助我解决 Hackerrank 问题https://www.hackerrank.com/challenges/insert-a-node-into-a-sorted-doubly-linked-list/problem 的 kotlin 实现
我得出了以下解决方案,它只通过了 8 次测试中的 3 次。
我对自己做错了什么感到困惑,因为当我搜索互联网时,我发现了一个非常相似的 Java 解决方案 - https://www.geeksforgeeks.org/insert-value-sorted-way-sorted-doubly-linked-list/
任何帮助将不胜感激,我对此感到不知所措。
fun sortedInsert(llist: DoublyLinkedListNode?, data: Int): DoublyLinkedListNode? {
val node = DoublyLinkedListNode(data)
if (llist == null) return node
if (llist.data >= data) {
node.next = llist
node.next!!.prev = node
return node
}
var current = llist
while (current?.next != null && current.next!!.data < data) {
current = current.next
}
node.next = current?.next
if (current?.next != null) current.next!!.prev = node
node.prev = current
current?.next = node
return llist
}
【问题讨论】:
-
我看到some comments 是Kotlin test harness is buggy,但它们已经有几年历史了。我的解决方案在提交时失败了 5/8 例,但在 Java 和 JS 中都接受了相同的算法。
-
乍一看还不错,不知道hackerrank是如何测试这个的,所以错误不能出现在您的输入/输出内容或DoublyLinkedListNode中吗?另一方面,值得一提的是,返回值实际上是不可为空的,所以你可以去掉问号,对于 while(var x != null) 构造,kotlin 提供了 generateSequence 函数,它允许你在没有你的情况下处理它改变“当前”。虽然它在这里可能不一定更具可读性。
标签: algorithm kotlin linked-list doubly-linked-list