Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Вывести значения односвязного списка (https://javascript.ru/forum/misc/18447-vyvesti-znacheniya-odnosvyaznogo-spiska.html)

[ANTI]CheateR 01.07.2011 08:49

Вывести значения односвязного списка
 
Доброе утро, ребят.

Сегодня наткнулся на хитрую задачу:

function reversePrint (linkedList) {
                   // ...
         }
         
         var someList = {
                   value: 1,
                   next: {
                            value: 2,
                            next: {
                                      value: 3,
                                      next: {
                                               value: 4,
                                               next: null
                                      }
                            }
                   }
         };
         reversePrint(someList);


Напишите код функции (reversePrint), которая выведет значения переданного ей односвязного списка в обратном порядке (4,3,2,1). Для вывода значений используйте конструкцию console.log.

Наверное, многие поняли откуда эта задачка :)

У меня есть решение, но оно какое-то банальное... А как бы вы решили задачу?
И, кстати, объясните, пожалуйста, что это за конструкция console.log

ksa 01.07.2011 08:51

Цитата:

Сообщение от [ANTI
CheateR]У меня есть решение, но оно какое-то банальное..

Таки показал бы... :lol:

[ANTI]CheateR 01.07.2011 08:55

может мне стыдно?)


function reversePrint (linkedList) {
   alert(linkedList.next.next.next.value+", "+linkedList.next.next.value+", "+linkedList.next.value+", "+linkedList.value)
}



ну это реально чушь какая-то)

ksa 01.07.2011 08:57

Цитата:

Сообщение от [ANTI
CheateR]ну это реально чушь какая-то

Ну да...
Вложеность предполагает использование рекурсии.

ksa 01.07.2011 09:10

Как вариант...

function reversePrint (linkedList) {
	if (linkedList.next) {
		reversePrint(linkedList.next)
	}
	alert(linkedList.value)
}
var someList = {
	value: 1,
	next: {
		value: 2,
		next: {
			value: 3,
			next: {
				value: 4,
				next: null
			}
		}
	}
};
reversePrint(someList);

[ANTI]CheateR 01.07.2011 13:11

Крут! Спасибо

console.log ведь только в firebug'e используется?

ksa 01.07.2011 14:05

Цитата:

Сообщение от [ANTI
CheateR]console.log ведь только в firebug'e используется?

Это я не вкурсе... :)

SergeyGG 02.02.2015 09:26

Цитата:

Сообщение от ksa (Сообщение 111308)
Как вариант...

function reversePrint (linkedList) {
	if (linkedList.next) {
		reversePrint(linkedList.next)
	}
	alert(linkedList.value)
}
var someList = {
	value: 1,
	next: {
		value: 2,
		next: {
			value: 3,
			next: {
				value: 4,
				next: null
			}
		}
	}
};
reversePrint(someList);

То есть : функция если встречает что то в next запускает себя еще раз, но мне всё равно не понятно как она сохраняет уровень вложенности для списка.
Почти месяц ломаю голову с этими списками. Но щас становится ясно. Не понятно новичку как себя ведет интерпритар в таких ситуациях. Не где толком не раскрывают этот момент. Может посоветуете источники какие нить на русском или курсы. Я читаю книжку "Выразительный javaScaript" на русском. И как раз застрял на списках. Щас чуть прояснилось.

Боря 17.03.2016 22:07

ответ на вопрос
 
Уважаемый, хотя я и сам ищу информацию про списки, в этом случае я думаю список вложенности вычисляется по уровню указателя, т.е. если указатель указывает на 2 элемент, значит рекурсия находиться на 1 первом уровне и т.д.


Часовой пояс GMT +3, время: 10:57.