当前位置: 首页 > 知识库问答 >
问题:

javascript链表实现中的函数/变量范围

姚永年
2023-03-14

参考leetcode的javascript解决方案-添加两个数字https://leetcode.com/problems/add-two-numbers/

为什么列表范围在头部范围改变时不改变,即头部改变时。next被分配给新节点引用,head被分配回head。接下来,为什么要列出它。next没有改变,与整个链表保持相同

请参考以下解决方案-

Definition for singly-linked list.
function ListNode(val) {
    this.val = val;
    this.next = null;
}
@param {ListNode} l1
@param {ListNode} l2
@return {ListNode}

var addTwoNumbers = function(l1, l2) {
    var List = new ListNode(0);
    var head = List;
    var sum = 0;
    var carry = 0;

    while(l1!==null||l2!==null||sum>0){

        if(l1!==null){
            sum = sum + l1.val;
            l1 = l1.next;
        }
        if(l2!==null){
            sum = sum + l2.val;
            l2 = l2.next;
        }
        if(sum>=10){
            carry = 1;
            sum = sum - 10;
        }

        head.next = new ListNode(sum);
        head = head.next;

        sum = carry;
        carry = 0;

    }

    return List.next;
};

我试了下面的东西,但它给出了一些不同的输出,当a.next改变时,b.next也改变了,为什么呢?

function value (val){ this.x = val;this.next = null;}
let a = new value(1);
console.log(a.x);
console.log(a.next, "a next");
let b = a;
console.log(b.x);
console.log(b.next,"b next")
a.next = 23;
console.log(a.next, "a next");
console.log(b.next,"b next")

VM1592:3 1
VM1592:4 null 'a next'
VM1592:6 1
VM1592:7 null 'b next'
VM1592:9 23 'a next'
VM1592:10 23 'b next'

上面的例子中列表没有改变,但是头部改变了?为什么b和a改变了?为什么

共有1个答案

吕晟睿
2023-03-14

headList 是保存对同一 ListNode 的引用的变量ListNode 是一个可变对象。因此,当您更改 head 的属性时,比如说更改其下一个属性,这也反映在 List' 中,因为它们都指向同一个对象。

现在,当您更改< code>head的值时,比方说< code > head = head . next ,< code > List 仍然引用初始的< code>ListNode。< code>head和< code>List互不引用。改变一个本身不会改变另一个。它们只是指向一个对象的指针。只有改变对象本身的属性才会反映在另一个对象中,只要两者都指向同一个对象(即在开始时)。

 类似资料:
  • 问题内容: 我想通过使用以下代码来获取全局变量中的数据: 但是问题是我只是在d3.json函数中定义了数据变量,但是没有定义。我该如何解决这个问题? 谢谢 问题答案: 由于d3请求(如)是异步的,因此最佳做法是将所有依赖于外部请求的代码包装在请求回调中,以确保该代码在执行之前可以访问数据。来自D3 docs :“异步加载数据时,依赖于已加载数据的代码通常应存在于回调函数中。” 因此,一种选择是将所

  • 这样的函数怎么实现。 这样操作需要 new Sint(1,2) ,有什么办法可以实现直接 Sint(1,2).j(10) 输出结果吗?

  • 问题内容: 我正在使用dgrid,并且尝试在外部设置dataStore。当页面加载时,我打电话来创建网格。在网格加载时,null为null。执行查询时,将设置。 没有错误,但是网格仍然是空的。正在使用数据更新aliasStore,但是即使刷新了网格也没有将其反映在网格上。查询后如何获取反映在网格中的数据? Javascript对象 设置数据存储数据 问题答案: 您正在将“ this.Store”设

  • 有一个列表框(例如列表框A)包含值,如果我单击一个按钮(例如按钮X),它会将选定的值添加到另一个列表框(例如列表框B)。在此操作之后,列表框B将显示选择值。 在列表框B中(假设它有来自列表框A的值),如果我单击另一个按钮(例如按钮Y),则从列表框B中选择的值返回到列表框A 我按照这篇文章的答案并尝试将代码应用于列表框。 当我运行它时,我可以从列表框A中添加值(仅限单个值)。但我不能将值从列表框B移

  • 本文向大家介绍JavaScript实现的链表数据结构实例,包括了JavaScript实现的链表数据结构实例的使用技巧和注意事项,需要的朋友参考一下 此例是javascript来建立链表。。 并对此进行了排序。。 还可以在GenericList一般链表上进行扩展。 实现各种排序及增,删,改结点。。

  • 问题内容: javascript中变量的范围是什么?它们在函数内部和外部的作用域是否相同?还是有关系吗?另外,如果变量是全局定义的,则将变量存储在哪里? 问题答案: TLDR JavaScript具有词汇(也称为静态)作用域和闭包。这意味着您可以通过查看源代码来确定标识符的范围。 四个范围是: 全球-一切可见 功能-在功能(及其子功能和块)中可见 块-在块(及其子块)中可见 模块-在模块内可见 在