首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript数据结构与算法链表澄清

JavaScript数据结构与算法链表澄清
EN

Stack Overflow用户
提问于 2022-10-29 15:33:47
回答 1查看 23关注 0票数 0

我只是有点困惑,我想知道到底发生了什么。下面是关于Javascript -> https://www.youtube.com/watch?v=BVJv_AiXSGg&t=495s的DS&A教程(51:21部分)。我在这里问它是因为它没有在教程中提到。

以下是Node的课程:

代码语言:javascript
复制
class NodeClass {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

下面是实际链接列表的类:

代码语言:javascript
复制
class LinkedList {
  constructor(value) {
    const newNode = new NodeClass(value);

    this.head = newNode;
    this.tail = this.head;
    this.length = 1;
  }

  push(value) {
    const newNode = new NodeClass(value);

    this.tail.next = newNode;
    this.tail = newNode;

    this.length++;

    return this;
  }
}

印刷:

代码语言:javascript
复制
let myLinkedList = new LinkedList(7);
myLinkedList.push(4);

console.log(myLinkedList);

现在我和我真正困惑的部分是输出

代码语言:javascript
复制
LinkedList {
  head: NodeClass { value: 7, next: NodeClass { value: 4, next: null } },
  tail: NodeClass { value: 4, next: null },
  length: 2
}

如您所见,"next“属性有一个对象值,即"{ value: 4,next: null }”,但我不明白的是,我没有执行"this.head.next",但是它工作得很好。

你能帮我理解一下这件事的真相吗?

此外,如果我推送更多的数据,它完全可以像预期的那样工作。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-29 15:38:54

这是因为在javascript中对象是引用的。这意味着,当您将一个对象赋值给一个变量,然后将它赋值给另一个变量时,它们都将指向同一个对象,这意味着如果您更新一个对象,它也将反映在另一个变量中。

LinkedList的构造函数中,可以看到this.headthis.tail都分配给同一个对象newNode。因此,当您在push中推送一个新节点时,它会附加到尾部,并且它也会在头中反映,因为头指向根节点,所有其他节点都会作为尾部添加到下面的节点中。

在您的示例中,在push(4)之后,尾部现在指向值为4的节点。您可以执行另一个push,可能是push(42),并看到尾巴将一直指向最后一个节点,所有新节点都将一直附加到以下节点的next中。

您可以了解更多关于pass-by-reference in javascript的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74246576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档