我最近开始学习Kotlin,所以我决定在其中实现一些数据结构。 所以,我已经尝试实现单链表:在Kotlin中实现链接列表
package datastructures
public class LinkedList {
private data class Node(var nodeValue: Int, var next: Node? = null)
private var head: Node? = null
fun insert(n: Int) {
if(head == null) head = Node(n)
else {
var cur = head
while(cur?.next != null) {
cur = cur?.next
}
cur?.next = Node(n)
}
}
fun print() {
var cur = head
while(cur != null) {
print("${cur.nodeValue} ")
cur = cur?.next
}
}
}
fun main(args: Array<String>) {
val n = LinkedList()
n.insert(5)
n.insert(3)
n.print()
}
,我得到了以下错误:
Error:(22, 13) Kotlin: [Internal Error] org.jetbrains.jet.codegen.CompilationException: Back-end (JVM) Internal error: cannot store to value [email protected]
Cause: cannot store to value [email protected]
File being compiled and position: (22,13) in C:/Users/Khaled/IdeaProjects/Kotlin/src/LinkedList.kt
PsiElement: cur?.next = Node(n)
The root cause was thrown at: StackValue.java:75
at org.jetbrains.jet.codegen.ExpressionCodegen.genQualified(ExpressionCodegen.java:243)
at org.jetbrains.jet.codegen.ExpressionCodegen.genStatement(ExpressionCodegen.java:262)
at ...
我已经在这里和在谷歌搜索,但我想不出是什么造成这个错误的问题
编辑: 所以我试图重新实现insert
功能和使用requireNotNull()
以避免样稿iler担心无效安全的东西。
下面是代码和它现在的工作:
fun insert(n: Int) {
if (head == null) head = Node(n)
else {
var cur = head!!
while (cur.next != null) {
cur = cur.next!!
}
cur.next = Node(n)
}
}
你用什么版本的科特林的? – abacabadabacaba 2014-09-22 03:43:29
@abacabadabacaba 0.8.11 – 2014-09-22 03:48:41
注意:内部编译器错误是由于Kotlin的一个非常旧的beta版本。 – 2015-12-27 05:34:42