Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Практическая работа по 4 спринту курса "Андроид разработка" в Яндекс Практикум. Реализация LinkedList.

Notifications You must be signed in to change notification settings

kirillNay/LinkedList

Repository files navigation

Описание

В данной практической работе требуется создать собственную реализацию двусвязного списка LinkedList. Двусвязный список - это структура данных, представляющая собой последовательность элементов, каждый из которых содержит ссылку на предыдущий и следующий элемент в списке. Каждый элемент двусвязного списка называется узлом.

Основные характеристики двусвязного списка

Узел (Node)

Узел содержит два указателя (ссылки): один на предыдущий узел (prev), и второй на следующий узел (next). Кроме того, узел хранит данные (значение элемента), которое может быть любого типа.

Голова и хвост (Head и Tail)

Голова списка - это первый элемент, у которого нет указателя на предыдущий элемент. Хвост списка - это последний элемент, у которого нет указателя на следующий элемент.

image

Задание

Для выполнения задания необходимо дополнить созданный класс LinkedList следующим функционалом:

  1. Класс LinkedList должен быть обобщенным, то есть способным хранить элементы любого типа.
LinkedList<String> stringList = new LinkedList<>();
LinkedList<Integer> integerList = new LinkedList<>();
  1. Класс должен иметь функционал добавления элемента в конец список через метод add:
LinkedList<String> list = new LinkedList<>();
list.add("Новая строка");
list.add("Еще одна строка");
// Список: ["Новая строка", "Еще одна строка"]
  1. Класс должен иметь функционал удаления элемента из списка через метод remove(Element e)
LinkedList<Integer> list = new LinkedList<>();
list.add(4);
list.add(2);
list.add(3);
list.remove(2);
// Список: [4, 3]
  1. Класс должен иметь метод size() для получения размера списка:
LinkedList<String> list = new LinkedList<>();
list.add("Строка #1");
list.add("Строка #2");
list.add("Строка #3");
int size = list.size();
// size = 3
// Список: ["Строка #1", "Строка #2", "Строка #3"]
  1. Класс должен иметь возможность объединять два списка, вставляя передаваемый список в конец:
LinkedList<String> list = new LinkedList<>();
list.add("Строка");
LinkedList<String> newList = new LinkedList<>();
list.add("Строка нового списка #1");
list.add("Строка нового списка #2");
list.addAll(newList);
// Список: ["Строка", "Строка нового списка #1", "Строка нового списка #2"]

Также должен присутствовать функционал объединения функционала со списком, элементы которого являются подтипами элементов исходного:

class A {}
class B extends A {}
LinkedList<A> listA = new LinkedList<>();
listA.add(new A());
LinkedList<B> listB = new LinkedList<>();
listB.add(new B());
listA.addAll(listB);

Тестирование

Для тестирования вашей реализации LinkedList предлагается использовть написанные Unit-тесты. Чтобы их запустить, стоит открыть найти класс LinkedListTest в папке src/test и нажать на зеленый треугольник. При первом запуске класс с тестом не сможет скомпилироваться. image

Вашей задачей будет доработка класса LinkedList так, чтобы тест успешно компилировался, запускался и все методы проходили успешно.

Важно!

  • Не измененяйте класс LinkedListTest
  • Не используйте классы из java.util
  • Авторское решение можно подсмотреть в ветке final

About

Практическая работа по 4 спринту курса "Андроид разработка" в Яндекс Практикум. Реализация LinkedList.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

AltStyle によって変換されたページ (->オリジナル) /