Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node:
- def __init__(self, data):
- self.data = data # Значение узла
- self.prev = None # Ссылка на предыдущий узел
- self.next = None # Ссылка на следующий узел
- class DoublyLinkedList:
- def __init__(self):
- self.head = None # Голова списка
- self.tail = None # Хвост списка
- def is_empty(self):
- """Проверить, пустой ли список."""
- return self.head is None
- def add_front(self, data):
- """Добавить элемент в начало списка."""
- new_node = Node(data)
- new_node.next = self.head # Новый узел указывает на текущую голову
- if self.head:
- self.head.prev = new_node # Старая голова указывает на новый узел
- else:
- self.tail = new_node # Если список был пуст, новый узел — это и хвост
- self.head = new_node # Голова обновляется на новый узел
- def add_back(self, data):
- """Добавить элемент в конец списка."""
- new_node = Node(data)
- new_node.prev = self.tail # Новый узел указывает на старый хвост
- if self.tail:
- self.tail.next = new_node # Старый хвост указывает на новый узел
- else:
- self.head = new_node # Если список был пуст, новый узел — это и голова
- self.tail = new_node # Хвост обновляется на новый узел
- def remove(self, data):
- """Удалить первый найденный узел с заданным значением."""
- current = self.head
- while current:
- if current.data == data:
- if current.prev:
- current.prev.next = current.next # Обход узла при удалении
- else:
- self.head = current.next # Удаляемая голова обновляется
- if current.next:
- current.next.prev = current.prev # Обход узла при удалении
- else:
- self.tail = current.prev # Удаляемый хвост обновляется
- return # Узел найден и удален
- current = current.next
- print(f"Элемент с данными {data} не найден.")
- def search(self, data):
- """Поиск узла с заданным значением."""
- current = self.head
- while current:
- if current.data == data:
- return True
- current = current.next
- return False
- def display_forward(self):
- """Отобразить список от головы к хвосту."""
- elements = []
- current = self.head
- while current:
- elements.append(str(current.data))
- current = current.next
- print(" -> ".join(elements))
- def display_backward(self):
- """Отобразить список от хвоста к голове."""
- elements = []
- current = self.tail
- while current:
- elements.append(str(current.data))
- current = current.prev
- print(" <- ".join(elements))
- def size(self):
- """Возвращает количество узлов в списке."""
- count = 0
- current = self.head
- while current:
- count += 1
- current = current.next
- return count
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement