Golang のリンク リストの追加、削除、変更、クエリ操作の詳細な説明
リンク リスト (リンク リスト) は一般的なデータ構造であり、ノードのセット (ノード) 。各ノードにはデータと次のノードへのポインタが含まれます。配列と比較したリンク リストの利点は、挿入および削除操作の時間計算量が O(1) であり、リンク リストの長さによって制限されないことです。 Golang では、構造体とポインターの組み合わせを使用してリンク リストを実装できます。
この記事では、Golang でのリンク リストの追加、削除、変更、確認の操作を詳しく紹介し、対応するコード例を示します。
Golang でリンク リスト構造を定義するには、次の構造を使用できます:
type ListNode struct { Val int Next *ListNode }
そのうち、 ListNode
は各ノードのタイプ、Val
はノードに格納されているデータ、Next
は次のノードへのポインターです。
リンク リストの作成はノードごとに行うことも、スライスまたは配列を通じてすばやく作成することもできます。以下は、リンク リストをノードごとに作成するサンプル コードです。
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
を呼び出して、指定されたデータを含むリンク リストを作成します。
リンク リストへの挿入操作では、挿入する位置と挿入する要素を指定する必要があります。以下は、指定した位置に要素を挿入するサンプル コードです。
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
関数を呼び出して、指定した位置に要素を挿入します。
リンクリストの削除操作は、削除するノードまたはインデックスを指定して実行します。以下は、指定したノードを削除するサンプル コードです。
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 }
関数を呼び出して、指定したノードを削除します。
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
関数を呼び出して、指定したノードの値を変更します。
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 サイトの他の関連記事を参照してください。