我在javascript中实现了一个双向链接列表,但是,我无法在nodejs中打印出我的结果。我是那些喜欢想象事物以充分理解它们的人之一。我使用了来自npm的prettyjson模块来测试我的单个LL结果,这个结果很好但是因为数据结构是循环的,所以它会引发双重LL的最大堆栈错误。只是想知道,有没有更好,更准确地测试抽象数据结构的工具或最佳实践?
更具体地说,由于数据结构我正在测试循环,因此我无法在终端(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);
答案 0 :(得分: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'));
}
或者你更喜欢输出它。
我不知道会自动为您执行此操作的库函数,但正如您所看到的那样,自己动手并不会过于复杂。