【问题标题】:iterating through and changing nodes in singly linked list遍历和更改单链表中的节点
【发布时间】:2019-11-08 19:17:54
【问题描述】:

问题是我不明白为什么这段代码有效。它可以工作,但我就是无法想象它。这是一个从单链表中删除节点的函数。我觉得它不应该起作用,因为它实际上并没有改变列表中的任何元素,我只是改变了我设置的变量的值等于列表中的某个值。换句话说,当我创建一个“runner”变量来遍历列表时,为什么我对“runner”所做的更改实际上会改变列表本身。类似地,如果我这样做了

var x = 1
var y = x
y = 2

显然,x 仍将等于 1。为什么我的链表“跑步者”不一样。在下面的 deleteNode 函数中,为什么更改 runner.next 值实际上会更改函数外部存在的节点或列表中的任何内容?

function deleteNode(head, position) {
    var runner = head
    var counter = 0
    while (runner) {
        if (counter == position - 1) {
            runner.next = runner.next.next
            return head;
        }
        runner = runner.next
        counter++
    }
}

【问题讨论】:

    标签: javascript linked-list singly-linked-list


    【解决方案1】:

    因为 runner 是一个对象,所以 runner 变量是对该对象的引用。

    例如

    const x = {a:1}
    const y = x;
    x.a = 3
    console.log(y.a) // this will print 3 also
    

    【讨论】:

    • 错字const x = {a:1]
    • 当我执行 runner=runner.next 时,为什么“head”的值不会改变?如果跑步者正在参考头部,当我改变跑步者时头部参考是否应该改变?
    猜你喜欢
    • 2012-08-08
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多