リンク リストの逆転は、リンク リストの順序を逆転する必要がある一般的なアルゴリズムの問題です。 Golang 言語の場合、リンク リスト反転の実装は、Golang ポインターや構造などの基本的な言語機能を使用して実装できます。
以下では、リンク リスト反転の Golang 実装を詳しく紹介します。
まず、リンク リストの基本構造を見てみましょう。リンクされたリストはノードで構成され、各ノードは次のノードへのポインタ、つまり次のポインタを持ちます。連結リストの先頭ノードは連結リスト全体の開始位置を表し、先頭ノードの次ポインタは最初のノードを指します。以下に示すように:
type ListNode struct { Val int Next *ListNode }
このうち、Val はノードの値を表し、Next は次のノードへのポインタを表します。リンク リストの実装では、次の 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 に設定する必要があります。次に、ループを通じてリンク リストを反転します。具体的な反転操作は次のとおりです:
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 } }
以上がgolangでリンクリストを逆にする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。