golang 實現連結串列爽不爽?

阿兵雲原生發表於2023-03-05

猶記得剛學 C 語言的時候,學到指標這一章,就會有讓我們寫連結串列的需求,頭插法,尾插法,翻轉連結串列,合併連結串列,約瑟夫環等等

學的不亦樂乎,但是 對於指標剛學的時候,真是摸不著腦殼,不知道 xdm 會有這種感受嗎,動不動就段錯誤

今天,我們來看看 golang 寫連結串列是有多爽

思路大概是這樣的:

  • 這裡我們簡單寫,就不寫迴圈連結串列了
  • 需要一個連結串列結構體,這個結構體得有頭指標,有尾指標
  • 需要一個節點的結構體,這個裡面有節點的資料,節點的下一個指標
  • 我們這就來實現 頭插法尾插法

定義資料結構

  • 定義連結串列結構
type MyList struct {
    head *ListNode
    tail *ListNode
}
  • 定義節點結構
type ListNode struct {
    num int
    next * ListNode
}

實現頭插法

所謂連結串列,就像排隊一樣,隊員和隊員之間用線連起來,但是這個線是有一個明確方向的,頭插法,就是從連結串列頭插入元素,新元素成為頭

func (list *MyList) HeadInsert(num int) {
    // 初始化一個節點,填入資料,和下一個指標指向 空
    node := &ListNode{
        num:  num,
        next: nil,
    }
    // 判斷尾巴 和 頭都是空,那麼說明這一次是第 一個節點,頭和尾都指向這個節點即可
    if list.tail == nil && list.head == nil {
        list.tail = node
        list.head = node
        return
    }
    // 頭插,從頭插入
    node.next = list.head
    list.head = node
}

實現尾插法

尾插法就是從連結串列尾巴插入元素,新元素成為尾巴

func (list *MyList) TailInsert(num int) {
    // 初始化一個節點,填入資料,和下一個指標指向 空
    node := &ListNode{
        num:  num,
        next: nil,
    }
    // 判斷尾巴 和 頭都是空,那麼說明這一次是第 一個節點,頭和尾都指向這個節點即可
    if list.tail == nil && list.head == nil {
        list.tail = node
        list.head = node
        return
    }

    // 尾插,從尾插入
    list.tail.next = node
    list.tail = node
}

看到上述寫的尾插法和頭插法是不是寫法很類似,其實就是後面的幾行程式碼邏輯不一樣而已,原理都是一樣的

go 裡面無論是使用指標,還是使用結構體,都是使用 . ,而不像 C 裡面使用 ->

遍歷連結串列

遍歷連結串列就非常簡單了,一個一個打出來就可以了

func (list *MyList) PrintList() {
    if list == nil{
        fmt.Println("list is nil")
        return
    }

    tmp := list.head

    for tmp != nil{
        fmt.Println(tmp.num)
        tmp = tmp.next
    }
}

聯合上述方法一起跑一遍

我們聯合上述的程式碼,拼拼湊湊來實現我們的連結串列

  • (頭插或者尾插)插入 10 個資料
  • 遍歷一下連結串列
func main() {
    // 插入 10 個數
    l := MyList{}
    for i:=0;i<10;i++{
        l.HeadInsert(i)
    }

    l.PrintList()
}

看完的兄弟們是什麼感受,有沒有覺得使用 golang 寫連結串列真的是非常簡單的事情,當然連結串列的思想還是和 C 是一樣一樣的,只不過 用 golang 來實現真的太方便了

歡迎點贊,關注,收藏

朋友們,你的支援和鼓勵,是我堅持分享,提高質量的動力

好了,本次就到這裡

技術是開放的,我們的心態,更應是開放的。擁抱變化,向陽而生,努力向前行。

我是阿兵雲原生,歡迎點贊關注收藏,下次見~

相關文章