最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang實現(xiàn)單鏈表的示例代碼

 更新時間:2023年03月15日 10:12:32   作者:小象褲衩  
本文主要介紹了Golang實現(xiàn)單鏈表的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1. 定義節(jié)點

// Node 定義節(jié)點
type Node struct {
?? ?Data any
?? ?Next *Node
}

type LinkedList struct {
?? ?headNode *Node // 頭指針
}

2. IsEmpty():

// IsEmpty 判斷鏈表是否為空
func (l *LinkedList) IsEmpty() bool {
    if l.headNode == nil {
        return true
    }
    return false
}

3. Length():

// Length 向鏈表尾部添加結點
func (l *LinkedList) Length() int {
    currentNode := l.headNode
    if currentNode == nil {
        return 0
    }
    length := 0
    for currentNode != nil {
        length++
        currentNode = currentNode.Next
    }
    return length
}

4. AddFromHead():

// AddFromHead 向鏈表尾部添加結點
func (l *LinkedList) AddFromHead(data any) {
    node := &Node{data, nil}
    if l.IsEmpty() { // 如果鏈表為空,設置該node為頭結點即可
        l.headNode = node
        return
    }
    // 將頭指針指向的頭結點設置為該節(jié)點的next,并將頭指針指向該節(jié)點
    node.Next = l.headNode
    l.headNode = node
}

5. AddFromTail():

// AddFromTail 向鏈表尾部添加結點
func (l *LinkedList) AddFromTail(data any) {
    node := &Node{data, nil}
    if l.IsEmpty() == true {
        l.headNode = node
        return
    }
    currentNode := l.headNode
    for currentNode.Next != nil { // 直接遍歷到最后一個節(jié)點
        currentNode = currentNode.Next
    }
    currentNode.Next = node
}

6. Insert()

// Insert 向鏈表中指定位置添加結點,下標0開始
func (l *LinkedList) Insert(position int, data any) {
    if position <= 0 { // 如果位置<=0,就直接在從頭部添加
        l.AddFromHead(data)
    } else if position >= l.Length() { // 如果位置>=l.Length(),就直接在從尾部添加
        l.AddFromTail(data)
    } else { // 否則
        node := &Node{data, nil}
        preNode := l.headNode
        count := 0
        for count != position-1 { // 循環(huán)退出以后pre剛好在position-1的位置
            preNode = preNode.Next
            count++
        }
        node.Next = preNode.Next
        preNode.Next = node
    }
}

7. DeleteHead()

// DeleteHead 刪除頭部
func (l *LinkedList) DeleteHead() any {
    if l.IsEmpty() {
        fmt.Println("LinkedList is empty")
        return nil
    }
    head := l.headNode
    l.headNode = l.headNode.Next
    return head
}

8. DeleteTail()

// DeleteTail 刪除尾部節(jié)點
func (l *LinkedList) DeleteTail() any {
    if l.IsEmpty() {
        fmt.Println("LinkedList is empty")
        return nil
    }
    currentNode := l.headNode
    for currentNode.Next.Next != nil { //如果下下個節(jié)點為nil,說明下個節(jié)點是最后一個節(jié)點
        currentNode = currentNode.Next
    }
    data := currentNode.Next.Data
    currentNode.Next = nil // 刪除最后一個節(jié)點
    return data
}

9. Remove()

// Remove 刪除指定節(jié)點
func (l *LinkedList) Remove(data any) {
    if l.IsEmpty() {
        return
    }
    currentNode := l.headNode
    if currentNode.Data == data {
        l.headNode = currentNode.Next
    } else {
        for currentNode.Next != nil { // 遍歷到倒數(shù)第二個節(jié)點
            if currentNode.Next.Data == data { // 用下一個節(jié)點去比較(保證尾結點不被漏掉),頭結點在上面已經(jīng)比較過了
                currentNode.Next = currentNode.Next.Next
            } else {
                currentNode = currentNode.Next
            }
        }
    }
}

10. Contain()

// Contain 鏈表中是否包含某個值的節(jié)點
func (l *LinkedList) Contain(data any) bool {
    if l.IsEmpty() {
        return false
    }
    currentNode := l.headNode
    if currentNode.Data == data {
        return true
    }
    for currentNode != nil {
        if currentNode.Data == data {
            return true
        }
        currentNode = currentNode.Next
    }
    return false
}

11. Traverse()

// Traverse 遍歷單鏈表
func (l *LinkedList) Traverse() {
    if l.IsEmpty() {
        fmt.Println("LinkedList is empty")
        return
    }
    currentNode := l.headNode
    for currentNode != nil {
        fmt.Printf("%v -> ", currentNode.Data)
        currentNode = currentNode.Next
    }
}

到此這篇關于Golang實現(xiàn)單鏈表的示例代碼的文章就介紹到這了,更多相關Golang 單鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang string、int、int64 float 互相轉換方式

    golang string、int、int64 float 互相轉換方式

    這篇文章主要介紹了golang string、int、int64 float 互相轉換方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Go語言中的數(shù)據(jù)格式(json、xml?、msgpack、protobuf)使用總結

    Go語言中的數(shù)據(jù)格式(json、xml?、msgpack、protobuf)使用總結

    在分布式的系統(tǒng)中,因為涉及到數(shù)據(jù)的傳輸,所以一定會進行數(shù)據(jù)的交換,此時就要定義數(shù)據(jù)交換的格式,例如二進制、Json、Xml等等。本文總結了Go語言中的數(shù)據(jù)格式,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • golang int64轉int的方法

    golang int64轉int的方法

    這篇文章主要介紹了golang int64轉int,本文給大家提供兩種方法 ,將 golang int64 轉換為golang int,結合實例代碼給大家分享轉換方法,需要的朋友可以參考下
    2023-01-01
  • golang新手不注意可能會出現(xiàn)的一些小問題

    golang新手不注意可能會出現(xiàn)的一些小問題

    最近在學習golang,發(fā)現(xiàn)了一些新手們需要注意的小問題,下面這篇文章主要給大家介紹了關于golang新手不注意可能會出現(xiàn)的一些小問題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-12-12
  • 詳解Go語言中空結構體的慣用法

    詳解Go語言中空結構體的慣用法

    空結構體在 Go 編程中有著廣泛的應用,本文將詳細探討空結構體的幾種典型用法,并解釋為何它們在特定場景下非常有用,希望對大家有所幫助
    2024-11-11
  • 基于context.Context的Golang?loader緩存請求放大問題解決

    基于context.Context的Golang?loader緩存請求放大問題解決

    這篇文章主要為大家介紹了基于context.Context的Golang?loader緩存請求放大解決方案,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Go語言如何實現(xiàn)將[][]byte轉為io.Reader

    Go語言如何實現(xiàn)將[][]byte轉為io.Reader

    本文主要介紹了如何在Go語言中實現(xiàn)將[][]byte轉換為io.Reader,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2025-02-02
  • Go語言框架快速集成限流中間件詳解

    Go語言框架快速集成限流中間件詳解

    這篇文章主要為大家介紹了Go語言框架快速集成限流中間件詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-09-09
  • Go語言集成開發(fā)環(huán)境之VS Code安裝使用

    Go語言集成開發(fā)環(huán)境之VS Code安裝使用

    VS Code是微軟開源的一款編輯器,插件系統(tǒng)十分的豐富,下面介紹如何用VS Code搭建go語言開發(fā)環(huán)境,需要的朋友可以參考下
    2021-10-10
  • Windows上安裝Go并配置環(huán)境變量(圖文步驟)

    Windows上安裝Go并配置環(huán)境變量(圖文步驟)

    開始使用Go創(chuàng)建應用程序之前,需要設置開發(fā)環(huán)境,本文主要介紹了Windows上安裝Go并配置環(huán)境變量,具有一定的參考價值,感興趣的可以了解一下
    2023-08-08

最新評論

津南区| 垣曲县| 南昌县| 车致| 济阳县| 开原市| 郧西县| 海兴县| 丹巴县| 安仁县| 萨嘎县| 尉氏县| 长宁区| 大埔县| 册亨县| 定日县| 湟中县| 定边县| 嘉峪关市| 武汉市| 新化县| 四川省| 河池市| 灌阳县| 斗六市| 曲松县| 贵港市| 聂拉木县| 宜君县| 平乡县| 郑州市| 陵川县| 禹州市| 白沙| 嘉兴市| 鄂州市| 吉安县| 西安市| 江油市| 获嘉县| 大石桥市|