en.javascript.info/1-js/4-data-structures/8-array-methods/9-output-single-linked-list/task.md
2015-03-10 12:36:58 +03:00

50 lines
No EOL
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Вывести односвязный список
[importance 5]
[Односвязный список](http://ru.wikipedia.org/wiki/Связный_список) -- это структура данных, которая состоит из *элементов*, каждый из которых хранит ссылку на следующий. Последний элемент может не иметь ссылки, либо она равна `null`.
Например, объект ниже задаёт односвязный список, в `next` хранится ссылка на следующий элемент:
```js
var list = {
value: 1,
next: {
value: 2,
next: {
value: 3,
next: {
value: 4,
next: null
}
}
}
};
```
Графическое представление этого списка:
<img src="linked-list.svg">
Альтернативный способ создания:
```js
//+ no-beautify
var list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };
```
Такая структура данных интересна тем, что можно очень быстро разбить список на части, объединить списки, удалить или добавить элемент в любое место, включая начало. При использовании массива такие действия требуют обширных перенумерований.
Задачи:
<ol>
<li>Напишите функцию `printList(list)`, которая выводит элементы списка по очереди, при помощи цикла.</li>
<li>Напишите функцию `printList(list)` при помощи рекурсии.</li>
<li>Напишите функцию `printReverseList(list)`, которая выводит элементы списка в обратном порядке, при помощи рекурсии.
Для списка выше она должна выводить `4`,`3`,`2`,`1`</li>
<li>Сделайте вариант `printReverseList(list)`, использующий не рекурсию, а цикл.</li>
</ol>
Как лучше -- с рекурсией или без?