leofun01 написав:Якщо тут є косяки або пропозиції, то пишіть
 Тут я звертаюсь до всіх форумців, не тільки до автора теми.
Я хочу видалити повторюваний код. А саме:
1. Блок з функціями додаваня елемента
class LinkedList:
    # ...
    def add_first(self, value):
        node = self.first
        self.first = Node(value, node, None)
        if self.last == None:
            self.last = self.first
        if node != None:
            node.prev = self.first
        self.size = self.size + 1
    def add_last(self, value):
        node = self.last
        self.last = Node(value, None, node)
        if self.first == None:
            self.first = self.last
        if node != None:
            node.next = self.last
        self.size = self.size + 1
замінити на
class LinkedList:
    # ...
    def add(self, value, first[, ...]):
        # ... щось спільне
        self.size = self.size + 1
    def add_first(self, value):
        self.add(value, True[, ...])
    def add_last(self, value):
        self.add(value, False[, ...])
2. Блок з функціями видаленя елемента
class LinkedList:
    # ...
    def pop_first(self):
        if self.first == None:
            raise Exception('List is empty.')
        self.size = self.size - 1
        node = self.first
        self.first = node.next
        if self.first == None:
            self.last = None
        else:
            self.first.prev = None
        node.next = None
    def pop_last(self):
        if self.last == None:
            raise Exception('List is empty.')
        self.size = self.size - 1
        node = self.last
        self.last = node.prev
        if self.last == None:
            self.first = None
        else:
            self.last.next = None
        node.prev = None
замінити на
class LinkedList:
    # ...
    def pop(self, first[, ...]):
        self.size = self.size - 1
        # ... щось спільне
    def pop_first(self):
        self.pop(True[, ...])
    def pop_last(self):
        self.pop(False[, ...])
При цьому використаня True|False в параметрах не обовязкове. Задовольняє будь-який спосіб передати інформацію про те, з яким кінцем працювати. Якщо для цього треба змінити структуру списку (LinkedList) або додати якісь функції за межами класу, то це ок.