Goでリンクリストを実装する方法

zbt
リリース: 2023-09-25 13:57:28
オリジナル
1374 人が閲覧しました

リンク リストは一連のノードで構成される一般的なデータ構造で、各ノードにはデータと次のノードへのポインターが含まれます。リンク リストは大量のデータの保存と操作に使用でき、要素の挿入と削除のパフォーマンスが効率的です。 Go 言語では、ポインターと構造体を使用してリンク リストを実装できます。

まず、データと次のノードへのポインターを含むノード構造を定義する必要があります。 Go 言語では、構造体を使用してノードを定義できます。

type Node struct {
data int
next *Node
}
ログイン後にコピー

次に、リンク リストのヘッド ノードへのポインタを含むリンク リスト構造を定義できます。

type LinkedList struct {
head *Node
}
ログイン後にコピー

リンク リスト構造では、リンク リストを操作するためのメソッドをいくつか定義できます。まず、リンク リストの最後にノードを挿入するメソッドを実装する必要があります。

func (list *LinkedList) Insert(data int) {
newNode := &Node{data: data, next: nil}
if list.head == nil {
list.head = newNode
} else {
current := list.head
for current.next != nil {
current = current.next
}
current.next = newNode
}
}
ログイン後にコピー

このメソッドでは、まず新しいノードを作成し、それにデータを割り当てます。次に、リンク リストが空かどうかを確認し、空であれば、新しいノードをリンク リストのヘッド ノードとして設定します。それ以外の場合は、最後のノードが見つかるまでリンク リストをたどって、最後のノードの後に​​新しいノードを挿入します。

次に、リンク リスト内のノードを削除するメソッドを実装できます。

func (list *LinkedList) Delete(data int) {
if list.head == nil {
return
}
if list.head.data == data {
list.head = list.head.next
return
}
current := list.head
for current.next != nil {
if current.next.data == data {
current.next = current.next.next
return
}
current = current.next
}
}
ログイン後にコピー

このメソッドでは、まずリンク リストが空かどうかを確認し、空の場合は直接戻ります。次に、リンク リストのヘッド ノードに削除するデータが含まれているかどうかを確認し、含まれている場合は、ヘッド ノードの次のノードを新しいヘッド ノードとして設定します。それ以外の場合は、削除するデータを含むノードが見つかるまでリンク リストをたどって、そのノードの次のノードを現在のノードの次のノードに設定します。

最後に、リンク リスト内のすべてのノードを出力するメソッドを実装できます。

func (list *LinkedList) Print() {
current := list.head
for current != nil {
fmt.Println(current.data)
current = current.next
}
}
ログイン後にコピー

このメソッドでは、リンク リストのヘッド ノードから開始してリンク リストを走査し、各ノードのデータを出力し、現在のノードが次のノードを指すようにします。

上記の方法を使用すると、リンク リストを作成し、そのリスト内でノードを挿入、削除、印刷できます。

func main() {
list := LinkedList{}
list.Insert(1)
list.Insert(2)
list.Insert(3)
list.Print() // 输出:1 2 3
list.Delete(2)
list.Print() // 输出:1 3
}
ログイン後にコピー

上記のコードを通して、リンク リストの作成、挿入、削除、印刷操作を簡単に実装できることがわかります。これは Go 言語でリンク リストを実装する基本的な方法です。

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート