ホームページ > バックエンド開発 > Golang > golangでリンクリストを逆にする方法

golangでリンクリストを逆にする方法

PHPz
リリース: 2023-04-23 10:25:41
オリジナル
960 人が閲覧しました

リンク リストの逆転は、リンク リストの順序を逆転する必要がある一般的なアルゴリズムの問​​題です。 Golang 言語の場合、リンク リスト反転の実装は、Golang ポインターや構造などの基本的な言語機能を使用して実装できます。

以下では、リンク リスト反転の Golang 実装を詳しく紹介します。

まず、リンク リストの基本構造を見てみましょう。リンクされたリストはノードで構成され、各ノードは次のノードへのポインタ、つまり次のポインタを持ちます。連結リストの先頭ノードは連結リスト全体の開始位置を表し、先頭ノードの次ポインタは最初のノードを指します。以下に示すように:

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

このうち、Val はノードの値を表し、Next は次のノードへのポインタを表します。リンク リストの実装では、次の 2 つの問題に注意する必要があります。

  1. リンク リストのヘッド ノードのポインタを記録する必要がある
  2. リンク リストのヘッド ノードのポインタを記録する必要がある現在のノードと次のノード

リンク リストの定義が完了したら、リンク リスト反転の Golang 実装を作成できます。具体的な実装方法は以下のとおりです:

func reverseList(head *ListNode) *ListNode {
    //边界条件
    if head == nil || head.Next == nil {
        return head
    }
    //定义当前节点和下一个节点指针
    cur, next := head, head.Next
    //头节点指针置为空
    head.Next = nil
    for next != nil {
        //暂存下一个节点的指针
        tmp := next.Next
        //反转节点
        next.Next = cur
        //移动当前节点和下一个节点指针
        cur, next = next, tmp
    }
    return cur
}
ログイン後にコピー

まず境界条件を判断し、連結リストが空またはノードが 1 つしかない場合は、元の連結リストに直接戻ります。次に、現在のノード ポインタと次のノード ポインタを定義します。リンク リストの反転では、現在のノードが前のノードを指す必要があるため、最初のノードの前のノードを nil に設定する必要があります。次に、ループを通じてリンク リストを反転します。具体的な反転操作は次のとおりです:

  1. 次のノードのポインタを一時的に保存します
  2. 現在のノード ポインタを反転して前のノードを指すようにします
  3. 現在のノード ポインタと次のノード ポインタを移動します
##最後に、リンク リストの反転した先頭ノード ポインタを返します。

上記のコードを使用してリンク リストを反転するプロセスでは、この関数を呼び出して、リンク リストのヘッド ポインター パラメーターを渡す必要があります。例:

func main() {
    var head ListNode
    head.Next = &ListNode{Val: 1}
    head.Next.Next = &ListNode{Val: 2}
    head.Next.Next.Next = &ListNode{Val: 3}
    head.Next.Next.Next.Next = &ListNode{Val: 4}
    //链表反转
    head.Next = reverseList(head.Next)
    for head.Next != nil {
        fmt.Println(head.Next.Val)
        head.Next = head.Next.Next 
    }
}
ログイン後にコピー
このサンプル コードでは、まず 5 つのノードを持つリンク リストを構築します。次に、reverse 関数を呼び出して逆にします。最後に、ノードをたどることにより、逆向きリンク リスト ノードが順番に出力されます。

上記のコード例を通じて、リンク リスト反転の Golang 実装が比較的単純で一般的であることがわかります。リンクリストの基本操作とポインタの使い方をマスターすれば、リンクリストの反転操作も簡単に実装できます。

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

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