首頁  >  文章  >  後端開發  >  一文講解golang怎麼實現反轉鍊錶

一文講解golang怎麼實現反轉鍊錶

藏色散人
藏色散人轉載
2021-07-19 14:37:002983瀏覽

問題:反轉一個單鍊錶。

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

首先先認識鍊錶這個資料結構:

鍊錶節點中有兩個元素:

  • #指標
type ListNode struct {
    Val  int
    Next *ListNode
}

Next指向下一個節點

那麼這題其實就是把指標指向前一個節點

位置調換次數 pre cur whole
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######### ####3######3->2->1->nil#######4->5#####4->5->3 ->2->1->nil############4######4->3->2->1->nil## ####5######5->4->3->2->1->nil##############可以看出來#########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中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除