Golang でのリンク リストの挿入、削除、更新、クエリ操作の詳細な分析

WBOY
リリース: 2024-01-28 10:37:06
オリジナル
573 人が閲覧しました

Golang でのリンク リストの挿入、削除、更新、クエリ操作の詳細な分析

Golang のリンク リストの追加、削除、変更、クエリ操作の詳細な説明

リンク リスト (リンク リスト) は一般的なデータ構造であり、ノードのセット (ノード) 。各ノードにはデータと次のノードへのポインタが含まれます。配列と比較したリンク リストの利点は、挿入および削除操作の時間計算量が O(1) であり、リンク リストの長さによって制限されないことです。 Golang では、構造体とポインターの組み合わせを使用してリンク リストを実装できます。

この記事では、Golang でのリンク リストの追加、削除、変更、確認の操作を詳しく紹介し、対応するコード例を示します。

  1. リンク リスト構造の定義

Golang でリンク リスト構造を定義するには、次の構造を使用できます:

type ListNode struct {
    Val  int
    Next *ListNode
}
ログイン後にコピー

そのうち、 ListNode は各ノードのタイプ、Val はノードに格納されているデータ、Next は次のノードへのポインターです。

  1. リンク リストの作成

リンク リストの作成はノードごとに行うことも、スライスまたは配列を通じてすばやく作成することもできます。以下は、リンク リストをノードごとに作成するサンプル コードです。

func createLinkedList(data []int) *ListNode {
    if len(data) == 0 {
        return nil
    }
    head := &ListNode{Val: data[0]}
    curr := head
    for i := 1; i < len(data); i++ {
        node := &ListNode{Val: data[i]}
        curr.Next = node
        curr = node
    }
    return head
}
ログイン後にコピー

関数 createLinkedList を呼び出して、指定されたデータを含むリンク リストを作成します。

  1. リンク リストへの挿入

リンク リストへの挿入操作では、挿入する位置と挿入する要素を指定する必要があります。以下は、指定した位置に要素を挿入するサンプル コードです。

func insertNode(head *ListNode, index int, val int) *ListNode {
    if index == 0 {
        newNode := &ListNode{Val: val, Next: head}
        return newNode
    }
    curr := head
    for i := 0; i < index-1; i++ {
        curr = curr.Next
        if curr == nil {
            return head
        }
    }
    newNode := &ListNode{Val: val}
    newNode.Next = curr.Next
    curr.Next = newNode
    return head
}
ログイン後にコピー

insertNode 関数を呼び出して、指定した位置に要素を挿入します。

  1. リンクリストの削除

リンクリストの削除操作は、削除するノードまたはインデックスを指定して実行します。以下は、指定したノードを削除するサンプル コードです。

func deleteNode(head *ListNode, target *ListNode) *ListNode {
    if head == nil || target == nil {
        return head
    }
    if head == target {
        return head.Next
    }
    curr := head
    for curr.Next != nil && curr.Next != target {
        curr = curr.Next
    }
    if curr.Next != nil {
        curr.Next = curr.Next.Next
    }
    return head
}
ログイン後にコピー

関数を呼び出して、指定したノードを削除します。

リンクリストの変更
  1. リンクリストの変更操作は、変更するノードまたはインデックスと新しい要素の値を指定することで実行されます。以下は、指定したノードを変更するサンプル コードです。
func modifyNode(head *ListNode, target *ListNode, val int) *ListNode {
    if head == nil || target == nil {
        return head
    }
    curr := head
    for curr != nil && curr != target {
        curr = curr.Next
    }
    if curr != nil {
        curr.Val = val
    }
    return head
}
ログイン後にコピー

modifyNode

関数を呼び出して、指定したノードの値を変更します。

リンク リストの検索
  1. リンク リストの検索操作は、リンク リストをトラバースすることによって実行されます。以下は、指定された要素を検索するためのサンプル コードです。
func searchNode(head *ListNode, val int) *ListNode {
    curr := head
    for curr != nil && curr.Val != val {
        curr = curr.Next
    }
    return curr
}
ログイン後にコピー

関数を呼び出して、指定された要素のノードを検索します。

以上、Golangにおけるリンクリストの追加、削除、変更、確認操作について詳しく説明しましたが、上記のコード例を通じて、リンクリストを柔軟に操作してさまざまな機能を実現することができます。重要なデータ構造として、リンク リストは、LRU キャッシュ メカニズム、LRU キャッシュ メカニズム、リンク リストの並べ替えなど、多くのシナリオで使用できます。実際の開発では、特定のニーズに応じて適切なデータ構造としてリンク リストを選択できます。 リンク リスト操作を扱うときは、NULL ポインター例外を避けるために、境界条件と空のリンク リストの処理に特別な注意を払う必要があることに注意してください。

この記事での紹介が、リンク リストについての皆さんのより深い理解と使用に役立つことを願っています。読んでくれてありがとう!

以上がGolang でのリンク リストの挿入、削除、更新、クエリ操作の詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!