Advertisement
LilChicha174

list 2

Oct 28th, 2024
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.88 KB | None | 0 0
  1. class Node:
  2.     def __init__(self, data):
  3.         self.data = data      # Значение узла
  4.         self.prev = None      # Ссылка на предыдущий узел
  5.         self.next = None      # Ссылка на следующий узел
  6.  
  7. class DoublyLinkedList:
  8.     def __init__(self):
  9.         self.head = None      # Голова списка
  10.         self.tail = None      # Хвост списка
  11.  
  12.     def is_empty(self):
  13.         """Проверить, пустой ли список."""
  14.         return self.head is None
  15.  
  16.     def add_front(self, data):
  17.         """Добавить элемент в начало списка."""
  18.         new_node = Node(data)
  19.         new_node.next = self.head  # Новый узел указывает на текущую голову
  20.  
  21.         if self.head:
  22.             self.head.prev = new_node  # Старая голова указывает на новый узел
  23.         else:
  24.             self.tail = new_node       # Если список был пуст, новый узел — это и хвост
  25.  
  26.         self.head = new_node           # Голова обновляется на новый узел
  27.  
  28.     def add_back(self, data):
  29.         """Добавить элемент в конец списка."""
  30.         new_node = Node(data)
  31.         new_node.prev = self.tail      # Новый узел указывает на старый хвост
  32.  
  33.         if self.tail:
  34.             self.tail.next = new_node  # Старый хвост указывает на новый узел
  35.         else:
  36.             self.head = new_node       # Если список был пуст, новый узел — это и голова
  37.  
  38.         self.tail = new_node           # Хвост обновляется на новый узел
  39.  
  40.     def remove(self, data):
  41.         """Удалить первый найденный узел с заданным значением."""
  42.         current = self.head
  43.  
  44.         while current:
  45.             if current.data == data:
  46.                 if current.prev:
  47.                     current.prev.next = current.next  # Обход узла при удалении
  48.                 else:
  49.                     self.head = current.next          # Удаляемая голова обновляется
  50.  
  51.                 if current.next:
  52.                     current.next.prev = current.prev  # Обход узла при удалении
  53.                 else:
  54.                     self.tail = current.prev          # Удаляемый хвост обновляется
  55.  
  56.                 return  # Узел найден и удален
  57.             current = current.next
  58.  
  59.         print(f"Элемент с данными {data} не найден.")
  60.  
  61.     def search(self, data):
  62.         """Поиск узла с заданным значением."""
  63.         current = self.head
  64.  
  65.         while current:
  66.             if current.data == data:
  67.                 return True
  68.             current = current.next
  69.  
  70.         return False
  71.  
  72.     def display_forward(self):
  73.         """Отобразить список от головы к хвосту."""
  74.         elements = []
  75.         current = self.head
  76.  
  77.         while current:
  78.             elements.append(str(current.data))
  79.             current = current.next
  80.  
  81.         print(" -> ".join(elements))
  82.  
  83.     def display_backward(self):
  84.         """Отобразить список от хвоста к голове."""
  85.         elements = []
  86.         current = self.tail
  87.  
  88.         while current:
  89.             elements.append(str(current.data))
  90.             current = current.prev
  91.  
  92.         print(" <- ".join(elements))
  93.  
  94.     def size(self):
  95.         """Возвращает количество узлов в списке."""
  96.         count = 0
  97.         current = self.head
  98.  
  99.         while current:
  100.             count += 1
  101.             current = current.next
  102.  
  103.         return count
  104.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement