私はScalaでLinkedList
を実装しようとしています。ScalaのLinkedList
主な問題は約Null
です。
しかし、最初のいくつかのコード:
class Node(xkey: String, xnext: Option[Node], xinfo: Int) {
val key: String = xkey;
var next = xnext.getOrElse(None);
var info: Int = xinfo;
def this(xkey: String, xinfo: Int) {
this(xkey, None, xinfo);
}
def this(xkey: String) {
this(xkey, None, -1);
}
@Override
override def toString: String = key + ":" + info
}
この時点で、私はすでに、物事が心配です。 のテールには、次のものがないので、xnext
をOption[Node]
として構成すると宣言します。
私の最初の試みでは、それはちょうどNode
でしたが、コンパイラが "nullはノードにキャストできません"と言ったのでnullオブジェクトに問題がありました。私はこのオプションに切り替えます。
でも、大丈夫ですか?あなたが知っているので、私のために次にでなく、Option
でなければなりません。そうでなければ、わかりません。linkedList
次のノードへの参照方法。
が何であれ、第二のクラス(つまり私のリンクリスト)
class LinkedNode {
private var first: Option[Node] = None;
private var last: Option[Node] = None;
def addNode(newNode: Node) = {
if (first == null) {
first = Some(newNode);
last = Some(newNode);
first.next = last;
}
else {
last.next = newNode;
newNode.next = null;
last = newNode
}
}
def size(): Long = {
var currentNode : = first;
var size = 0L;
while (currentNode != null) {
size+=1;
currentNode = currentNode.next;
}
size
}
def findNodeByKey(key: String) : Node = {
var currentNode = first;
while(currentNode != null) {
if (currentNode.key.equals(key))
currentNode
else {
currentNode = currentNode.next;
}
}
currentNode;
}
def delNodeByKey(key : String) : Boolean = {
var currentNode = first;
var previousNode = first;
while(currentNode != null) {
if (currentNode.key.equals(key)) {
previousNode = currentNode.next;
return true;
}
previousNode = currentNode;
currentNode = currentNode.next;
}
return false;
}
}
、何も。私はすでに最初と最後に私のコンストラクタにブロックしています。
どうすればいいですか? Node
?またはOption[Node]
?
問題はAdd
メソッドにもあります。
ノードを追加するときにNode
オブジェクトを追加したいのですが、Option[Node]
というオブジェクトは追加しません。
そして、私はすべてOption
,Some
およびNone
クラスで私が望むものを達成する方法を手に入れません。
私は私の要求であまりにも曖昧であってはいけないと知っていますが、何か助けてください。
P.S.私はすでにthis Q/Aを読みましたが、それは私を助けませんでした
ありがとうございます。あなたは本当に私を助ける説明。 –