2016-09-06 8 views
1

私はjavascriptで二重にリンクされたリストを実装しましたが、私はnodejsで結果をきれいに印刷することができません。私はそれらを完全に理解するために視覚化が好きな人々の一人です。私はprettyjsonモジュールをnpmから使用してきましたが、単独でLL結果をテストしましたが、データ構造が循環的であるため、最大スタックエラーが発生します。ただ、抽象的なデータ構造をより正確にテストするツールやベストプラクティスがあるのだろうかと疑問に思っています。javascriptで実装された循環的な二重リンクリストを印刷するには?

具体的には、問題は私が視覚的に私の結果をターミナル(nodejs env)で見ることができないということです。 prettyjsonモジュールを試しましたが、「最大呼び出しスタックサイズに達しました」というエラーがスローされます。 私は、視覚的に正確な方法でnodejsで結果を印刷するための他の選択肢を探そうと思います。

PS:カスタム印刷機能/メソッドをオブジェクト定義(クラス/コンストラクタ..に埋め込まれていますが、Javascriptで呼びたいと思っています)に実装しないでください。場合

それは私の実装

var prettyjson = require('prettyjson'); 
 

 
//Blueprints 
 
function Node(val){ 
 
    this.data = val; 
 
    this.next = null; 
 
    this.prev = null; 
 
} 
 

 
function DoublyList(){ 
 
    this._length = 0; 
 
    this.head = null; 
 
    this.tail = null; 
 
} 
 

 
//Adds to the list 
 
DoublyList.prototype.add = function(val){ 
 
    var node = new Node(val); 
 

 
    if(this._length){ 
 
    this.tail.next = node; 
 
    node.prev = this.tail; 
 
    this.tail = node; 
 
    }else{ 
 
    this.head = node; 
 
    this.tail = node; 
 
    } 
 

 
    this._length++; 
 
    return node; 
 
} 
 

 
var doublyList = new DoublyList(); 
 

 
doublyList.add(5); 
 
doublyList.add(10); 
 
doublyList.add(15); 
 
doublyList.add(20); 
 
doublyList.add(25); 
 

 
console.log(doublyList);

+2

この場合、「印刷」とは何ですか?アウトプットがどのように見えるのか、あなた自身でそれをやろうとしたときに、どこで止まったのでしょうか? – jfriend00

+1

このノードパッケージは便利かもしれません:https://www.npmjs.com/package/doubly-linked-listコードに潜んで、 'toString'メソッドを確認してください – daymannovaes

+1

これは' toString'メソッドへのリンクです:https://github.com/lmaccherone/DoublyLinkedList/blob/master/DoublyLinkedList.coffee#L64疑問があれば私に連絡してください – daymannovaes

答えて

0

あなたの実装をテストしようとしている場合は、ここで、便利ですが、あなたはほぼ確実に、いくつかのかなり厄介に対処する必要があるとしていますコマンドラインでそれを視覚化するための良い方法はわかりません。リストの内容を視覚化するだけであれば、通常のリストで行うこととまったく同じではありません。リストをループして各要素を印刷します。たとえば、次のように

function printList(doublyList) { 
    var nodes = []; 
    for (var n = doublyList.head; n != null; n = n.next) { 
     nodes.push(n.data); 
    } 
    console.log(nodes.join('<=>')); 
} 

あなたがリンクに両方向追加することができ、より詳細なデバッグ情報:

function debugPrintList(doublyList) { 
    var nodes = []; 
    for (var n = doublyList.head; n != null; n = n.next) { 
     var nextData = n.next ? n.next.data : 'undefined'; 
     var previousData = n.prev ? n.prev.data : 'undefined'; 
     nodes.push('[data: ' + n.data + '; next: ' + nextData + '; prev: ' + prevData + ']'); 
    } 
    console.log(nodes.join('\n')); 
} 

それともしかし、他のあなたは出力にそれを好むが。

私はこれを自動的に行うライブラリー機能を認識していませんが、わかるように、自分で行うことはあまり複雑ではありません。

+0

ありがとう@ Thor84no!私は、ネストされたオブジェクトが整理され、見やすい方法でターミナルに完全に印刷された実装をテストしようとしています。 –

+0

'debugPrintList'は、' data'が文字列の場合にそれを行う必要があります。そうでない場合は、単純に 'require( 'util')。inspect(n.data)'のようなものを使用して、データの書式化されたバージョンを取得することができます。どのような場合でも、あなたは確かにあなたの好みに出力を変更する必要があります。 – Thor84no

関連する問題