遍历和更改单链列表中的节点

时间:2019-06-26 19:14:35

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

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

var x = 1
var y = x
y = 2

很显然,x仍等于1。为什么我的链接列表“运行器”的true不一样。在下面的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++
    }
}

1 个答案:

答案 0 :(得分:0)

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

例如

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