双链表:圆形结构

时间:2018-12-13 07:46:20

标签: javascript data-structures linked-list doubly-linked-list

我正在用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);

每个节点都有一个nextprev值,包含上一个和下一个对象。由于对象是通过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));

这是双链表的预期行为吗?有内存问题吗?

0 个答案:

没有答案