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) або додати якісь функції за межами класу, то це ок.