@Ed1024

Односвязный список, как добавить элементы?

Как добавлять элементы в односвзязный цикл?

var printList = function(list){
    var tmp = list;
    for(var i = 0; i < 3; i++){
        console.log(tmp.value);
        tmp = tmp.rest;
    }   
}

var list = {
        value: 1,
        rest: null
    }

/* Не работает, добавляет последний элемент с выводом - 2
2
2
{ value: 2, rest: [Circular] }
*/
var temp = list;
    for(var i = 0; i < 3; i++){
        temp.value = i;
        list.rest = temp;
        temp = list.rest;
    }
    
    printList(list);
    console.log(list);
  • Вопрос задан
  • 1958 просмотров
Решения вопроса 1
isqua
@isqua
Научу HTML, CSS, JS, BEM и Git
В JS объекты копируются по ссылке, а не по значению. Когда вы делаете так:
var temp = list;
переменные temp и list ссылаются на один и тот же объект. Поэтому
list.rest = temp;
то же самое, что и
list.rest = list;

Вероятно, вы хотите получить что-то такое:
function printList(list){
    var tmp = list;
    while (tmp.rest !== null) {
        console.log(tmp.value);
        tmp = tmp.rest;
    }
}

var list = {
        value: 1,
        rest: null
    };

for(var i = 0; i < 10; i++){
    temp = { value: i, rest: list };
    list = temp;
}
    
printList(list);
console.log(list);

Для чего вам такая структура? Не подойдёт обычный массив?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы