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 サイトの他の関連記事を参照してください。