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

Связанные списки с двунаправленными ссылками — это структуры данных, которые обычно используются в информатике и имеют различные реальные приложения. Вот несколько методов, обычно связанных с двунаправленными связанными списками, а также примеры кода:

  1. Вставка в начало:
    Этот метод вставляет новый узел в начало связанного списка.
class Node:
    def __init__(self, data):
        self.data = data
        self.prev = None
        self.next = None
class DoublyLinkedList:
    def __init__(self):
        self.head = None
    def insert_at_head(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
        else:
            new_node.next = self.head
            self.head.prev = new_node
            self.head = new_node
  1. Вставка в хвост:
    Этот метод вставляет новый узел в конец связанного списка.
class DoublyLinkedList:
    def __init__(self):
        self.head = None
    def insert_at_tail(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
        else:
            current = self.head
            while current.next:
                current = current.next
            current.next = new_node
            new_node.prev = current
  1. Удаление по значению.
    Этот метод удаляет первое вхождение узла с заданным значением из связанного списка.
class DoublyLinkedList:
    def __init__(self):
        self.head = None
    def delete_by_value(self, value):
        if self.head is None:
            return
        current = self.head
        while current:
            if current.data == value:
                if current.prev:
                    current.prev.next = current.next
                else:
                    self.head = current.next
                if current.next:
                    current.next.prev = current.prev
                return
            current = current.next
  1. Обход:
    Этот метод обходит связанный список и печатает данные в каждом узле.
class DoublyLinkedList:
    def __init__(self):
        self.head = None
    def traverse(self):
        current = self.head
        while current:
            print(current.data)
            current = current.next
  1. Обратный обход.
    Этот метод обходит связанный список в обратном порядке и печатает данные в каждом узле.
class DoublyLinkedList:
    def __init__(self):
        self.head = None
    def reverse_traverse(self):
        current = self.head
        while current.next:
            current = current.next
        while current:
            print(current.data)
            current = current.prev