嗨,我是 Scala 的新手,想知道如何将一个简单的 ListNode 类从 Java 重写为 Scala。
在java中,如下所示,我可以创建一个头节点head = new ListNode(0),然后设置head.next = new ListNode(1)>
// Java code
public class ListNode {
public int val; // data stored in this node
public ListNode next; // link to next node in the list
public ListNode(int data) {
this.val = data;
}
}
但是我发现在Scala中很难重写相同的逻辑,下面是ListNode的案例类
// Scala code
case class ListNode[T](vl: T, nt: ListNode[T]) {
def value: T = vl
def next: ListNode[T] = nt
}
当我尝试实例化一个头节点,并实例化另一个新节点并将 head.next 设置为它时,它失败了:
scala> val head = ListNode(1, Nil)
<console>:9: error: type mismatch;
found : scala.collection.immutable.Nil.type
required: ListNode[?]
val head = ListNode(1, Nil)
我正在考虑将“下一个列表节点”放入 Option[] 中,以处理 null 情况,但它似乎变得越来越复杂......在 Scala 中是否有一种简单而正确的方法来做到这一点?
非常感谢。
最佳答案
您正在混合特征定义和实际值。我认为您需要的 scala 代码只是:
case class ListNode[T](value: T, next: ListNode[T] = null)
根据用例,您可能需要将 next
更改为 Option[ListNode[T]]
和/或将其定义为 var next
如果你希望它是可变的。
关于java - scala 中的 ListNode 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34342379/