我正在用Javascript实现一个双向链接列表:
const LinkedList = function() {
this.head = null;
this.tail = null;
};
const Node = function(value, next, prev) {
this.value = value;
this.next = next;
this.prev = prev;
};
LinkedList.prototype.addToHead = function(value) {
const newNode = new Node(value, this.head, null);
if (this.head) {
this.head.prev = newNode;
} else {
this.tail = newNode;
}
this.head = newNode;
};
const list = new LinkedList();
list.addToHead(100);
list.addToHead(200);
list.addToHead(300);
console.log(list);
每个节点都有一个next
和prev
值,包含上一个和下一个对象。由于对象是通过Javascript引用复制的,因此我们并不是在复制整个对象,而是指向它。
但是当我实例化LinkedList
并记录它时,我得到一个循环结构,每个节点都在next
内显示其node.next
节点;该node.next
将具有一个prev
值,显示第一个节点。这是一个圆形结构…例如,如果您尝试对此列表进行字符串化,则会得到TypeError: Converting circular structure to JSON
:
const LinkedList = function() {
this.head = null;
this.tail = null;
};
const Node = function(value, next, prev) {
this.value = value;
this.next = next;
this.prev = prev;
};
LinkedList.prototype.addToHead = function(value) {
const newNode = new Node(value, this.head, null);
if (this.head) {
this.head.prev = newNode;
} else {
this.tail = newNode;
}
this.head = newNode;
};
const list = new LinkedList();
list.addToHead(100);
list.addToHead(200);
list.addToHead(300);
console.log(JSON.stringify(list));
这是双链表的预期行为吗?有内存问题吗?