Python で双方向リンク リストを作成する

Yahya Irmak 2023年10月10日
Python で双方向リンク リストを作成する

この記事では、Python プログラミング言語を使用して双方向リンク リストを作成する方法について説明します。

Python で双方向リンク リストを作成する

双方向リンク リストとは、ノードと呼ばれる一連のレコードが連続してリンクされた、リンクされたデータ構造を指します。 各ノードには、前のポインター、次のポインター、およびデータ フィールドが含まれます。

前のポインタと次のポインタは、前のノードと次のノードを指します。 最初のノードの前のポインターと最後のノードの次のポインターは None を指します。

双方向リンクリストの特定のノードの前後に新しいノードを挿入できます。 また、双方向にリンクされたリストを前後にトラバースできます。

ただし、すべての双方向リンク リスト ノードには、前のポインター用の余分なスペースが必要です。

ノードクラスは次のように作成されます。 デフォルトでは、ポインターとデータ値は None です。

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

次に、双方向リンク リストに使用するクラスを作成します。 self.head はリストの先頭を示し、最初は None です。

add_to_end 関数を使用して、二重リンク リストの最後に新しいノードを追加します。 まず、new_node 変数を使用して Node クラスのインスタンスを作成します。

new_node はリストの最後の値になるため、次のポインターを None に設定します。 new_node を追加するノードを見つけるために last 変数を定義します。

まず、この変数は双方向リンク リストの先頭です (最初に追加されたノードの場合、この先頭は None になります)。

if ブロックで self.headNone かどうかを確認します。 その場合、リストにはノードがなく、リストの先頭は新しく追加されたノードになります。

while ブロックでは、last 変数の next ポインターをチェックして、リストの最後の値を見つけます。 None が得られるまで、last 変数を last.next に置き換えます。

last.next の値が None であるノードが見つかったら、リストを終了します。

new_node を指すことがわかった last ノード値の next ポインターを設定します。 最後に、new_node 変数の previous ポインタを last 変数に設定します。

したがって、new_node ノードは双方向リンク リストの最後に追加されます。

以下のコードを参照してください。

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

    def add_to_end(self, new_node):

        new_node = Node(data=new_node)
        new_node.next = None
        last = self.head

        if self.head is None:
            new_node.previous = None
            self.head = new_node
            return

        while last.next is not None:
            last = last.next

        last.next = new_node
        new_node.previous = last

add_to_beginning 関数を使用して、双方向リンク リストの先頭にノードを追加できます。 このプロセスはより簡単です。

まず、new_node 変数の next ポインターを self.head に設定し、previous ポインターを None に設定します。 したがって、古いリストの最初の値である先頭の値は、new_node が指す次の値になります。

if ブロックでは、リストが空の場合、self.head の値が None かどうかを確認します。 この値が定義されているか、先頭に対応するノードがある場合、このノードの previous ポインターを new_node に変更します。

最後に、self.headnew_node に変更します。 したがって、new_node が双方向リンク リストの先頭に追加されます。

以下のコードのデモを参照してください。

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

    def add_to_end(self, new_node):
        # previous function
        pass

    def add_to_beginning(self, new_node):

        new_node = Node(data=new_node)
        new_node.next = self.head
        new_node.previous = None

        if self.head is not None:
            self.head.previous = new_node

        self.head = new_node

以下の例では、double_linked_list 変数が最初に作成されます。 この変数は DoublyLinkedList クラスのインスタンスです。

次に、リストの最後に 13 を、先頭に 5 をそれぞれ追加します。 リストの最終状態は、5 -> 1 -> 3 -> None です。

doubly_linked_list = DoublyLinkedList()
doubly_linked_list.add_to_end(1)
doubly_linked_list.add_to_end(3)
doubly_linked_list.add_to_beginning(5)
著者: Yahya Irmak
Yahya Irmak avatar Yahya Irmak avatar

Yahya Irmak has experience in full stack technologies such as Java, Spring Boot, JavaScript, CSS, HTML.

LinkedIn

関連記事 - Python Data Structure