ホームページ >バックエンド開発 >Python チュートリアル >Pythonにリンクリストを実装するにはどうすればよいですか?

Pythonにリンクリストを実装するにはどうすればよいですか?

Johnathan Smith
Johnathan Smithオリジナル
2025-03-10 17:18:43622ブラウズ

pythonにリンクリストを実装するには、各要素を表す

クラスとリスト全体を管理するNodeクラスを作成することが含まれます。 それぞれLinkedListには、シーケンス内の次のノードへのデータとポインターが含まれています。 Nodeクラスには通常、挿入、削除、検索、およびトラバーサルの方法が含まれています。LinkedList

基本的な実装は次のとおりです。 二重リンクリスト(ノードは次のノードと以前のノードの両方を指します)も可能であり、特定の操作に対して異なるパフォーマンス特性を提供します。メモリの事前配分を必要とする配列とは異なり、ランタイム中に簡単に縮小します。

<code class="python">class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

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

    def append(self, data):
        new_node = Node(data)
        if not self.head:
            self.head = new_node
            return
        current = self.head
        while current.next:
            current = current.next
        current.next = new_node

    def prepend(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def delete_node(self, key):
        current = self.head
        if current and current.data == key:
            self.head = current.next
            current = None
            return

        prev = None
        while current and current.data != key:
            prev = current
            current = current.next

        if current is None:
            return

        prev.next = current.next
        current = None

    def print_list(self):
        current = self.head
        while current:
            print(current.data, end=" -> ")
            current = current.next
        print("None")

#Example Usage
llist = LinkedList()
llist.append(1)
llist.append(2)
llist.append(3)
llist.prepend(0)
llist.delete_node(2)
llist.print_list() # Output: 0 -> 1 -> 3 -> None
</code>

効率的な挿入と削除:

リンクリストの任意の位置でノードを挿入または削除するには、いくつかのポインターのみを挿入または削除する必要があります。隣接するメモリの割り当て、リンクされたリストは、特にまばらなデータを扱う場合、アレイよりもメモリ効率が高い場合があります。 O(1)ランダムアクセスを提供する配列。 Pythonリスト(動的配列)、スタック、キュー、およびツリー、リンクされたリストは、任意の位置で頻繁な挿入と削除が必要な場合に優れています。 ただし、ランダムアクセスが重要な場合、配列またはPythonリストの選択肢がはるかに優れています。 効率的な検索は、通常、訪問したノードの数を最小限に抑えることを意味します。 単独でリンクされたリストの場合、検索は本質的に線形です。O(n)時間の複雑さです。 ノードを削除するには、ノードの削除を見つける必要があり、その前任者と後継者のポインターを更新します。前のコード例の

delete_nodeメソッドは、線形時間削除を示しています。 検索の効率を向上させるには、特定のノードを頻繁に検索する必要がある場合は、自己バランスのとれたバイナリ検索ツリーまたはハッシュテーブルの使用を検討できます。 ただし、これらにはデータストレージの大幅な再構築が必要です。

Pythonプログラミングのリンクリストのいくつかの一般的なユースケースは何ですか?

リンクリストは、ランダムアクセスよりも動的な挿入と削除がより重要なシナリオでアプリケーションを見つけます:

  • 多項式を表す:各ノードは、多項式(係数と指数)の用語を表すことができます。プレイヤー:
  • リンクリストはプレイリストを効率的に管理し、曲の簡単な挿入と削除を可能にします。
  • イベントのログを維持する:
  • 各ノードはタイムスタンプを使用してイベントを表すことができます。グラフ。
  • 本質的に、アレイ内の要素をシフトするコスト(頻繁な挿入/欠失により)がシーケンシャルアクセスのコストを上回る場合、リンクされたリストは強力な競争相手です。

以上がPythonにリンクリストを実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。