Pythonは多くのデータ構造をサポートしていますが、双方向リストはその中でもあまり知られていないものの1つです。双方向リストは、リスト内の各要素が前の要素と次の要素の両方を指すことができるデータ構造です。これは、前の要素や次の要素に対する参照を保存する必要がある場合に便利です。Pythonで双方向リストを実装する方法を見てみましょう。

双方向リストのクラスを定義する

双方向リストを実装するには、まずNodeクラスを定義する必要があります。Nodeクラスには、次のノードと前のノードを保持するための2つのポインタが含まれています。

class Node:
    def __init__(self, data):
        self.data = data
        self.next = None
        self.prev = None

次に、双方向リストのクラスを定義します。このクラスには、最初のノードと最後のノードを保持するための2つのポインタが含まれています。

class DoublyLinkedList:
    def __init__(self):
        self.head = None
        self.tail = None

ノードを追加する

次に、双方向リストに新しいノードを追加する方法を見てみましょう。以下のメソッドを使用して、新しいノードを作成し、前のノードと次のノードのポインタを更新します。

def append(self, data):
    new_node = Node(data)
    if self.head is None:
        self.head = new_node
        self.tail = new_node
    else:
        new_node.prev = self.tail
        self.tail.next = new_node
        self.tail = new_node

ノードを削除する

双方向リストからノードを削除するには、以下のメソッドを使用して、削除するノードの前のノードと次のノードのポインタを更新します。

def remove(self, node):
    if node.prev is None:
        self.head = node.next
    else:
        node.prev.next = node.next

    if node.next is None:
        self.tail = node.prev
    else:
        node.next.prev = node.prev

これで、Pythonで双方向リストを実装する方法を学びました。双方向リストは、前の要素や次の要素に対する参照を保存する必要がある場合に便利であり、この実装方法を使用することで、双方向リストを簡単に実装することができます。