2017-11-14 6 views
0

このコードでは、動的型キャストのためのXの使用方法を理解できます。しかし、関数を追加して実際にデータをどのように読み込むのか理解できません。このコードでaddおよびprintNodes関数の動作を明確にしてください

誰でも、addとprintNodesメソッドのステップ実行を詳細に理解するのを手伝ってください。おかげで(単独で)リンクされたリストで

class UsingGenericsForLinkedList[X] { 
    private class Node[X](elem: X) { 
    var next: Node[X] = _ 
    override def toString = elem.toString 
    } 
    private var head: Node[X] = _ 

    def add(elem: X) { //Add element in the linekd list 
    val value = new Node(elem) 
    value.next = head 
    head = value 
    }  

    private def printNodes(value: Node[X]) { // prining value of the nodes 
    if (value != null) { 
     println(value) 
     printNodes(value.next) 
    } 
    } 
    def printAll() { printNodes(head) } //print all the node values at a time 
} 

答えて

0

は、一つの要素のペイロードと次のセルへのポインタを有する細胞(ここでNodeクラス)を維持します。ここではリンクリストが変更可能であるため、nextポインタを更新することができます(変更可能なのはvarです)。外部構造体は、リストの最初のノードであるheadへのポインタを保持します。最初はnullで空のリストを示します。トラバースすると、最初のノードがheadであることがわかります。ペイロードでペイロードを実行します(elemNodetoStringでしか利用できません)。nullになるまでnextポインタを参照して手順を繰り返します。 。 addheadを置き換え、新たに挿入されたノードのnextフィールドにheadの以前の値を置くこと

注。したがって、技術的には、このは、リストの先頭にという要素が付加されており、最初に見つかる要素になります。したがって、add(1), add(2), add(3)を実行すると、トラバーサル3, 2, 1が得られます。これはScalaのデフォルトListクラスの::に相当します。

HereはScala(不変)リスト型のチュートリアルです。唯一の違いは、nextまたはheadポインタを置き換えることはありませんが、前に置くと新しい先頭セルが返されることです。

関連する問題