Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで双方向リンクリストの末尾に新しいノードを挿入する方法

双方向リンクリスト( doubly linked list )の末尾に新しいノードを挿入するには、まず「Node」クラスを作成する必要があります。このクラスには3つの属性を持たせます。すなわち、ノードに格納されるデータ、リンクリスト上の次のノードへの参照、そして前のノードへの参照です。

以下にその実装例を示します。

サンプルコード

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

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

    def add_data_at_end(self, my_data):
        new_node = Node(my_data)
        if self.head == None:
            self.head = self.tail = new_node
            self.head.prev = None
            self.tail.next = None
        else:
            self.tail.next = new_node
            new_node.prev = self.tail
            self.tail = new_node
            self.tail.next = None

    def print_it(self):
        curr = self.head
        if self.head == None:
            print("リストは空です")
            return
        print("双方向リンクリストのノードは次のとおりです:")
        while curr != None:
            print(curr.data)
            curr = curr.next

my_instance = double_list()
print("双方向リンクリストの末尾に要素を追加します")
my_instance.add_data_at_end(10)
my_instance.print_it()
my_instance.add_data_at_end(24)
my_instance.print_it()
my_instance.add_data_at_end(54)
my_instance.print_it()
my_instance.add_data_at_end(77)
my_instance.print_it()
my_instance.add_data_at_end(92)
my_instance.print_it()

実行結果

双方向リンクリストの末尾に要素を追加します
双方向リンクリストのノードは次のとおりです:
10
双方向リンクリストのノードは次のとおりです:
10
24
双方向リンクリストのノードは次のとおりです:
10
24
54
双方向リンクリストのノードは次のとおりです:
10
24
54
77
双方向リンクリストのノードは次のとおりです:
10
24
54
77
92

解説

  • まず、データ・前ノードへの参照(prev)・次ノードへの参照(next)の3つの属性を持つ「Node」クラスを作成します。
  • 続いて、head(先頭)とtail(末尾)への参照を必要な属性として持つ「double_list」クラスを作成します。
  • 「add_data_at_end」というメソッドを定義し、これを使って双方向リンクリストの末尾にデータを追加できるようにします。リストが空の場合は新ノードがheadとtailの両方になり、そうでなければtailの後ろに新ノードを連結してtailを更新します。
  • もう一つのメソッド「print_it」を定義し、リンクリスト内のすべてのノードを順番に表示できるようにします。
  • 「double_list」クラスのオブジェクト(インスタンス)を生成し、そのメソッドを呼び出して双方向リンクリストの末尾へデータを追加していきます。
  • 「__init__」メソッドでは、headとtailの各ノードをNoneで初期化しています。
  • 要素を1つ追加するたびにリスト全体が走査され、末尾に新しい要素が連結されます。
  • 追加のたびに「print_it」メソッドを使い、現在のリストの状態をコンソールに出力して確認できます。
  1. Pythonでn個のノードを持つ双方向リンクリストを作成し、ノード数をカウントする方法

    双方向リンクリスト(ダブルリンクリスト)のノード数をカウントするには、まず「Node」クラスを作成する必要があります。このクラスには3つの属性を定義します。ノードが保持するデータ(data)、次のノードへの参照(next)、そして前のノードへの参照(prev)です。双方向リンクリストでは、各ノードがポインタを持ちます。現在のノードは、次のノードと前のノードの両方へのポインタを保持しています。リストの末尾にあるノードは、nextポインタに「NULL」(PythonではNone)を格納します。この構造により、リストは前方・後方のどちらの方向にも走査できるのが特徴です。以下に、具体的なコード例を示し

  2. Pythonで循環リンクリストの要素をソートするプログラムの作り方

    循環リンクリストの要素を並べ替える必要がある場合は、まず「Node」クラスを作成します。このクラスには、ノードに格納するデータと、リンクリスト上の次のノードへの参照という2つの属性が定義されています。 循環リンクリストの特徴は、先頭(ヘッド)と末尾(テール)が互いに隣接している点です。両者は円を形成するように接続されており、通常のリンクリストと異なり、最後のノードに「NULL」は存在しません。 続いて、初期化関数を持つ「linked_list」クラスを作成し、ノードの先頭を「None」に初期化します。 さらに、リンクリストへノードを追加するメソッド、リストを昇順・降順にソートするメソッド、ノ