Реализация двусвязного списка

Задание: Реализовать структуру данных 'двусвязный список' с основными операциями

Пример входных данных:

f(x) = e^x - 3x = 0
Начальное приближение: x0 = 1.0
Точность: 0.0001

Пример выходных данных:

Корень уравнения: x = 1.5121
Количество итераций: 5
f(1.5121) = 0.00008

Вариант 1: Добавление элемента в начало списка

Вариант 2: Добавление элемента в конец списка

Вариант 3: Удаление элемента из начала списка

Вариант 4: Удаление элемента из конца списка

Вариант 5: Поиск элемента по значению (вперед)

Вариант 6: Поиск элемента по значению (назад)

Вариант 7: Удаление элемента по значению

Вариант 8: Вставка элемента после заданного

Вариант 9: Вставка элемента перед заданного

Вариант 10: Получение элемента по индексу (с начала)

Вариант 11: Получение элемента по индексу (с конца)

Вариант 12: Изменение элемента по индексу

Вариант 13: Определение длины списка

Вариант 14: Проверка пустоты списка

Вариант 15: Очистка списка

Вариант 16: Копирование списка

Вариант 17: Объединение двух списков

Вариант 18: Разворот списка

Вариант 19: Сортировка списка

Вариант 20: Удаление дубликатов из списка