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

Pythonで連結リスト(リンクリスト)を作成し、要素を表示するプログラムの書き方

連結リスト(リンクリスト)を作成し、その中の要素を表示したい場合、「リストに値を追加するメソッド」と「要素を表示するメソッド」の2つを実装する必要があります。

本記事では、Pythonを使って連結リストを構築し、ユーザーが入力したデータを格納・表示するまでの一連の流れを、サンプルコードとともにわかりやすく解説します。

サンプルコード

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

class my_linked_list:
    def __init__(self):
        self.head = None
        self.last_node = None

    def add_value(self, my_data):
        if self.last_node is None:
            self.head = Node(my_data)
            self.last_node = self.head
        else:
            self.last_node.next = Node(my_data)
            self.last_node = self.last_node.next

    def print_it(self):
        curr = self.head
        while curr is not None:
            print(curr.data)
            curr = curr.next

my_instance = my_linked_list()
n = int(input('How many elements should be added ? '))
for i in range(n):
    data = int(input('Enter a data value : '))
    my_instance.add_value(data)
print('The linked list is : ')
my_instance.print_it()

実行結果

How many elements should be added ? 4
Enter a data value : 6
Enter a data value : 7
Enter a data value : 8
Enter a data value : 9
The linked list is :
6
7
8
9

コードの解説

  • まず、個々のノードを表す「Node」クラスを作成します。このクラスは、データ本体を保持する data と、次のノードへの参照を保持する next の2つの属性を持ちます。

  • 続いて、連結リスト本体となる「my_linked_list」クラスを、必要な属性とともに定義します。

  • このクラスには初期化用の __init__ 関数があり、先頭ノードを指す「head」と最後のノードを指す「last_node」を、いずれも None に初期化します。これにより、空のリスト状態からスタートできます。

  • 「add_value」という名前のメソッドを定義し、連結リストの末尾へ新しいデータを追加できるようにしています。リストが空の場合は新規ノードが head となり、既存のノードがある場合は last_node の next に新しいノードを接続します。

  • さらに「print_it」というメソッドを定義し、head から順にノードをたどりながら、連結リストの全データをコンソールに表示します。

  • 「my_linked_list」クラスのインスタンス(オブジェクト)を生成します。

  • ユーザーから、連結リストに追加する要素の個数を入力として受け取ります。

  • 入力された回数だけループを反復処理し、そのたびに add_value メソッドを呼び出してデータをリストに追加していきます。

  • 最後に print_it メソッドを使用して、登録されたすべての要素をコンソールに出力します。

ポイントまとめ

このプログラムでは、Nodeクラスで1つひとつのデータ単位を管理し、my_linked_listクラスでリスト全体の構造(先頭・末尾の追跡)を制御しています。last_node を保持しておくことで、末尾への追加が O(1) で行えるのが特徴です。連結リストは配列と異なりサイズの固定がないため、動的にデータを追加・削除したい場面で非常に有用なデータ構造です。

  1. Pythonで三分木(三項木)から双方向連結リストを作成する方法

    三分木(各ノードが最大3つの子ノードを持つ木構造)を双方向連結リストに変換するには、まず「Node」クラスを作成する必要があります。このクラスには、ノードに格納されるデータと、left(左)・mid(中央)・right(右)の子ノードへの参照という属性を持たせます。続いて、初期化処理を行う「ternary_tree_to_list」クラスを作成します。このクラスでは、ルート(root)、先頭(head)、末尾(tail)の各ポインタを「None」で初期化します。双方向連結リストとは双方向連結リストでは、各ノードが前後両方のノードへのポインタを持ちます。現在のノードは、次のノードへのポインタと前

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

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