en.javascript.info/1-js/8-more-functions/1-recursion/9-output-single-linked-list/task.md
Ilya Kantor d4c714cbe1 work
2016-08-05 16:53:08 +03:00

2.4 KiB
Raw Blame History

importance: 5


Вывести односвязный список

TODO: определение списка есть в статье, убрать отсюда. TODO: разбить на две задачи - прямой и обратный вывод.

Односвязный список -- это структура данных, которая состоит из элементов, каждый из которых хранит ссылку на следующий. Последний элемент может не иметь ссылки, либо она равна null.

Например, объект ниже задаёт односвязный список, в next хранится ссылка на следующий элемент:

var list = {
  value: 1,
  next: {
    value: 2,
    next: {
      value: 3,
      next: {
        value: 4,
        next: null
      }
    }
  }
};

Графическое представление этого списка:

Альтернативный способ создания:

var list = { value: 1 };
list.next = { value: 2 };
list.next.next = { value: 3 };
list.next.next.next = { value: 4 };

Такая структура данных интересна тем, что можно очень быстро разбить список на части, объединить списки, удалить или добавить элемент в любое место, включая начало. При использовании массива такие действия требуют обширных перенумерований.

Задачи:

  1. Напишите функцию printList(list), которая выводит элементы списка по очереди, при помощи цикла.
  2. Напишите функцию printList(list) при помощи рекурсии.
  3. Напишите функцию printReverseList(list), которая выводит элементы списка в обратном порядке, при помощи рекурсии. Для списка выше она должна выводить 4,3,2,1
  4. Сделайте вариант printReverseList(list), использующий не рекурсию, а цикл.

Как лучше -- с рекурсией или без?