перебирая и меняя узлы в односвязном списке - PullRequest
0 голосов
/ 26 июня 2019

Проблема в том, что я не понимаю, почему этот код работает.Это работает, но я просто не могу сосредоточиться на этом.Вот функция, которая удаляет узел из односвязного списка.Я чувствую, что это не должно работать, потому что это на самом деле не меняет ни один из элементов в списке, я просто изменяю значение переменной, которую я установил равной чему-то в списке.Другими словами, когда я создаю переменную «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++
    }
}

1 Ответ

0 голосов
/ 26 июня 2019

Это потому, что runner является объектом, и поэтому переменная runner является ссылкой на этот объект.

например

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