ホームページ  >  記事  >  バックエンド開発  >  Golang で逆リンクリストを実装する方法を説明した記事

Golang で逆リンクリストを実装する方法を説明した記事

藏色散人
藏色散人転載
2021-07-19 14:37:003002ブラウズ

質問: 単一リンクされたリストを逆にします。

输入: 1->2->3->4->5->NULL
输出: 5->4->3->2->1->NULL

まず、リンク リストのデータ構造を理解しましょう:

リンク リスト ノードには 2 つの要素があります:

  • Value
  • Pointer
type ListNode struct {
    Val  int
    Next *ListNode
}

Next は次のノードを指します

そして、この質問は実際にはポインターを前のノードを指すことになります。

##33->2->1->nil4->54->5->3->2->1->nil4#ご覧のとおり、
位置変更の数 pre cur 全体
0 nil 1->2->3->4->5 1->2 ->3->4->5
1 1->nil 2->-3>- >4->5 2->3->4->5->1->nil
2 2->1->nil 3->4->5 3->4->5->2->1 ->nil
##4->3->nil 2->1->ゼロ 5 5->4->3->2->1->ゼロ

pre は cur の最前面の要素 (pre = cur)

    cur は現在の位置の後ろにあるリンク リスト要素 ( cur = cur.Next)
  • cur .Next は pre (cur.Next = pre) に接続する必要があります
  • 完全なコード:
  • package main
    
    import "fmt"
    
    //链表节点
    type ListNode struct {
        Val  int
        Next *ListNode
    }
    
    //反转链表的实现
    func reversrList(head *ListNode) *ListNode {
        cur := head
        var pre *ListNode = nil
        for cur != nil {
            pre, cur, cur.Next = cur, cur.Next, pre //这句话最重要
        }
        return pre
    }
    
    func main() {
        head := new(ListNode)
        head.Val = 1
        ln2 := new(ListNode)
        ln2.Val = 2
        ln3 := new(ListNode)
        ln3.Val = 3
        ln4 := new(ListNode)
        ln4.Val = 4
        ln5 := new(ListNode)
        ln5.Val = 5
        head.Next = ln2
        ln2.Next = ln3
        ln3.Next = ln4
        ln4.Next = ln5
    
        pre := reversrList(head)
        fmt.Println(pre)
    }
Golang 関連の詳細技術記事については、
golang

チュートリアル コラムをご覧ください。

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

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。