ホームページ > バックエンド開発 > Golang > golang が再帰を使用してリンクされたリストを逆にする方法について話しましょう

golang が再帰を使用してリンクされたリストを逆にする方法について話しましょう

PHPz
リリース: 2023-03-29 15:50:17
オリジナル
1286 人が閲覧しました

golang では、再帰を使用してリンク リストの反転を実装できます。再帰関数では、まず現在のノードの次のノードをパラメータとして再帰関数に渡し、次に現在のノードが次のノードの隣のノードを指すようにする必要があります。最後に、再帰関数の戻り値が返されます。これが新しいヘッド ノードです。

以下は、再帰を使用してリンク リストを逆にする golang コードです:

type ListNode struct {
    Val int
    Next *ListNode
}
func reverseList(head *ListNode) *ListNode {
    if head == nil || head.Next == nil {
        return head
    }
    newHead := reverseList(head.Next)
    head.Next.Next = head
    head.Next = nil
    return newHead
}
ログイン後にコピー

最初にヘッド ノードまたはヘッド ノードの次のノードが nil であるかどうかを判断し、次に head を直接返します。 。それ以外の場合は、再帰関数を呼び出して、head の次のノードを渡します。次に、head の次のノードが head を指すようにし、head の次のノードを nil に設定します。最後に、新しいヘッド ノード newHead が返されます。

次のテスト コードを使用して、関数が正しいかどうかを確認できます:

// 测试代码
func main() {
    node1 := ListNode{Val: 1}
    node2 := ListNode{Val: 2}
    node3 := ListNode{Val: 3}
    node4 := ListNode{Val: 4}
    node5 := ListNode{Val: 5}
    
    node1.Next = &node2
    node2.Next = &node3
    node3.Next = &node4
    node4.Next = &node5
    
    fmt.Println("原链表:")
    printList(&node1)
    newHead := reverseList(&node1)
    fmt.Println("反转后的链表:")
    printList(newHead)
}
func printList(head *ListNode) {
    for p := head; p != nil; p = p.Next {
        fmt.Printf("%d ",p.Val)
    }
    fmt.Println()
}
ログイン後にコピー

実行結果は次のとおりです:

原链表:
1 2 3 4 5 
反转后的链表:
5 4 3 2 1
ログイン後にコピー

実行結果からわかるように、私たちの反転 リンク リスト関数 reverseList は、元のリンク リストを正常に反転しました。

概要:

この記事では、再帰関数を使用してリンク リストを反転する golang コードを実装する方法を紹介します。再帰関数を使用してリンク リストを反転するコードは、簡潔で理解しやすく、理解しやすいです。実際のプロジェクトでは、ニーズに応じてさまざまな方法を選択して逆リンク リストを実装できます。

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

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