javascript 将多个节点压入链表后Head仍为空?

gzszwxb4  于 2023-03-11  发布在  Java
关注(0)|答案(1)|浏览(101)
class node {
    constructor(val) {
        this.data = val;
        this.next = null;
    }
}

class linkedlist {
    constructor() {
        this.head = null;
    }

    push = (val) => {
        if (!this.head) {
            this.head = new node(val);
            return;
        }
        let temp = new node(val);
        temp.next = this.head;
        this.head = temp;
    }

    print = () => {
        while (this.head) {
            console.log(this.head.data);
            this.head = this.head.next;
        }
    }
}

var ll = new linkedlist();
var n = 5;
while (n--) ll.push(n);

ll.print(); // 0 1 2 3 4

console.log(ll.head); // null

为什么head仍然为空?是因为我使用let声明类变量吗?
head必须是全局范围才能修改它的值吗?为什么print函数在head仍然为空的情况下工作得很好?

j9per5c4

j9per5c41#

你的打印函数正在递增head直到它为空,所以当你调用print后检查head的值时,它总是给予null。总是初始化临时变量为head,并使用它像下面这样迭代,以保持对列表的引用。

print = () => {
    let pointer = this.head;
    while (pointer) {
      console.log(pointer.data);
      pointer = pointer.next;
    }
  };

相关问题