У меня есть следующий код для преобразования массива в связанный список:
function arrayToList(array) {
var list = null;
for (var i = array.length - 1; i >= 0; i--)
list = {value: array[i], rest: list};
return list;
}
Этот код был дан мне, поэтому я пытаюсь его понять. Я получаю базовую интуицию/суть этого (я работал со связанными списками, уже взял класс структур данных на Java, понял основы указателей на C) и т. д.
Однако что-то не щелкает, и я хочу убедиться, что вижу, что происходит. Итак, давайте представим, что мы создали переменную list, ссылающуюся на область памяти, значение которой объявлено как null. Предположим, что этот «адрес памяти» равен 0001:
0001: [null] список
Так что же происходит после первой итерации нашего цикла? Это моя интерпретация. список теперь относится к новому фрагменту пространства. То есть, переопределив list в строке:
list = {value: array[i], rest: list};
мы создали «новый» объект, занимающий новое пространство. Итак, теперь у нас может быть:
0001: [null]
0002: [массив[i]] list.value
0003: [null] list.rest
(Я не совсем уверен, куда именно «указывает» list сейчас, предполагая, что 0002, хотя концептуально я думаю, что это спорный вопрос в Javascript)
Верно ли это понимание? Я привык думать о структурах данных а-ля Java, где такой объект, как list, имеет уже определенные блоки пространства каждый раз, когда создается экземпляр. Я работал с Python, но раньше не создавал с ним связанные списки. Исходя из этого, я предполагаю, что такой язык, как Javascript, является гибким в том смысле, что вы можете просто иметь переменную равной нулю, затем ссылаться на хеш, затем, когда вы устанавливаете ее как другой хеш, он создает «новый» хэш и т. д.
Спасибо!
linked list
? 20.09.2014