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

【Python入門】双方向連結リストから最大値を見つける方法

双方向連結リスト(Doubly Linked List)の中で最も大きな要素を探す必要がある場合、以下の3つの機能を実装します。

  • 連結リストに要素を追加するメソッド
  • 連結リストの要素を出力・操作するための構造
  • 連結リスト内の最大値を求めるメソッド

ここでは、「Node」クラスで各ノードを定義し、前後のノードへの参照(prev / next)を持たせることで、双方向にたどれる連結リストを構築します。その後、先頭から順に各ノードのデータを比較していくことで最大値を取得します。

サンプルコード

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

class DoublyLinkedList_structure:
    def __init__(self):
        self.first = None
        self.last = None

    def add_vals(self, data):
        self.insert_at_end(Node(data))

    def insert_at_end(self, newNode):
        if self.last is None:
            self.last = newNode
            self.first = newNode
        else:
            newNode.prev = self.last
            self.last.next = newNode
            self.last = newNode

def find_largest_val(my_list):
    if my_list.first is None:
        return None
    largest_val = my_list.first.data
    curr = my_list.first.next
    while curr:
        if curr.data > largest_val:
            largest_val = curr.data
        curr = curr.next
    return largest_val

my_instance = DoublyLinkedList_structure()

my_list = input('Enter the elements in the doubly linked list ').split()
for elem in my_list:
    my_instance.add_vals(int(elem))

largest_val = find_largest_val(my_instance)
if largest_val:
    print('The largest element is {}.'.format(largest_val))
else:
    print('The list is empty.')

実行結果

Enter the elements in the doubly linked list 45 12 67 89 234 567 888 44 999
The largest element is 999.

コードの解説

  • まず「Node」クラスを作成します。このクラスはデータ(data)、次のノードへの参照(next)、前のノードへの参照(prev)の3つの属性を持ちます。

  • 次に、必要な属性を持つ「DoublyLinkedList_structure」クラスを作成します。

  • 「__init__」(イニシャライザ)関数では、先頭の要素(ヘッド)を「None」として初期化します。

  • 「add_vals」メソッドを定義し、リストへ値を簡単に追加できるようにします。

  • 「insert_at_end」メソッドを定義し、双方向連結リストの末尾に新しいノードを挿入できるようにします。リストが空の場合は、新規ノードが先頭かつ末尾になります。

  • さらに「find_largest_val」関数を定義し、連結リスト全体を走査して最大値を検出します。最初のノードの値を初期値とし、残りのノードの値と順番に比較していきます。

  • 「DoublyLinkedList_structure」クラスのインスタンスを生成します。

  • ユーザーからの入力値を整数に変換しながら連結リストへ追加していきます。

  • 「find_largest_val」メソッドを呼び出して最大値を取得します。

  • 結果をコンソールに出力して表示します。リストが空の場合は、その旨のメッセージを表示します。

このアルゴリズムの計算量は O(n) であり、リストの長さに比例して処理時間が増加します。双方向連結リストは末尾への挿入が O(1) で行えるため、頻繁に要素を追加しながら最大値を求めたいケースにも効率的に対応できます。

  1. Pythonでリスト内の最大値を見つける方法をわかりやすく解説

    この記事では、Pythonを使ってリストの中から最大の要素(最大値)を見つける方法について解説します。初心者の方でも理解しやすいよう、複数のアプローチをコード例とともに紹介していきます。 問題の概要 問題文: 与えられたリストの中から、最も大きい要素を求めて出力してください。 Pythonには便利な組み込み関数が用意されているため、これらを活用することで短いコードで効率的に問題を解決できます。ここでは主に sort() メソッドと max() 関数の2つの方法を取り上げます。 方法1:sort() 関数を使う sort() メソッドはリストを昇順に並べ替えます。並べ替え後のリストの末尾(インデ

  2. Pythonで配列内の最大の要素を見つける方法を解説

    この記事では、「配列の中から最大の要素を求める」という問題の解決方法について詳しく解説します。 問題の概要 問題文:与えられた配列に対して、その中で最も大きい要素を計算して求める必要があります。 ここではブルートフォース(総当たり)アプローチを使用します。これは、配列全体を先頭から順番に走査しながら各要素を比較し、その時点での最大値を更新していくというシンプルかつ確実な手法です。 実装例 以下に具体的なコードを示します。 # 最大値を求める関数 def largest(arr, n): # 最大要素の初期値として最初の要素を設定 max = arr[0] # 配列全体を