如何查看整个链接列表



尝试通过LinkedList实现Queue,代码:

class ListNode {
constructor(x) {
this.value = x;
this.next = null;
}
}
class Queue {
constructor() {
this.first = null
this.last = null
this.length = 0   
}
getUnderlyingList() {
return this.first
}

enqueue(value) {
const newNode = new ListNode(value);
if (this.isEmpty()) {
this.first = newNode;
this.last = newNode;
}
else {
this.last.next = newNode;
this.last = newNode;
}
this.length++;
return this ;
}
dequeue() {
if (this.isEmpty()) return null;
const itemToDel = this.first;
if (this.first === this.last) {
this.last = null;
}
this.first = this.first.next;
this.length--;
return itemToDel;
}
}

一切正常(我认为(,但是getUnderlyingList((。

想要得到这样的东西:

{"value":537,"next":{"value":201,"next":{"value":886,"next":{"value":582,"next":{"value":518,"next":{"value":42,"next":{"value":668,"next":{"value":48,"next":{"value":136,"next":{"value":674,"next":null}}}}}}}}}}

只得到:

{"value":674,"next":null}

如何查看整个链条?

这里缺少一些东西。首先,Queue类缺少您使用的isEmpty方法。我想,它应该有

isEmnpty() {
return this.first == null;
}

添加了这一点,您的代码就能正常工作。但是,如果您在控制台中执行它,您将看不到json——您将看到浏览器看到的内容,即一个包含两个字段的对象,一个基元值和另一个类型为ListNode的对象。如果你想要打印出整个内容,你需要定义你自己的toString方法——当然是在节点类上,但也可以在整个列表中使用。然后将队列打印为字符串。这是修改后的代码:

class ListNode {
constructor(x) {
this.value = x;
this.next = null;
}
}
class Queue {
constructor() {
this.first = null
this.last = null
this.length = 0   
}

isEmpty() {
return this.first == null;
}
getUnderlyingList() {
return this.first
}
enqueue(value) {
const newNode = new ListNode(value);
if (this.isEmpty()) {
this.first = newNode;
this.last = newNode;
}
else {
this.last.next = newNode;
this.last = newNode;
}
this.length++;
return this ;
}
dequeue() {
if (this.isEmpty()) return null;
const itemToDel = this.first;
if (this.first === this.last) {
this.last = null;
}
this.first = this.first.next;
this.length--;
return itemToDel;
}
}
ListNode.prototype.toString = function() {
return JSON.stringify(this);
}
Queue.prototype.toString = function() {
return JSON.stringify(this.first);
}

这是执行日志:

queue = new Queue()
> Queue {first: null, last: null, length: 0}
queue.enqueue(537)
> Queue {first: ListNode, last: ListNode, length: 1}
queue.enqueue(638)
> Queue {first: ListNode, last: ListNode, length: 2}
> queue.getUnderlyingList()
ListNode {value: 537, next: ListNode}
"" + queue
'{"value":537,"next":{"value":638,"next":null}}'

您会注意到最后一个命令是"" + queue,它强制将queue显式转换为字符串,该字符串隐式调用生成JSON的toString方法。因此,您在输出中看到的是表示队列的JSON字符串,而不是浏览器如何在内部看到对象。

相关内容

  • 没有找到相关文章

最新更新