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

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

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

1. 定義節(jié)點(diǎn)

// Node 定義節(jié)點(diǎn)
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 向鏈表尾部添加結(jié)點(diǎn)
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 向鏈表尾部添加結(jié)點(diǎn)
func (l *LinkedList) AddFromHead(data any) {
    node := &Node{data, nil}
    if l.IsEmpty() { // 如果鏈表為空,設(shè)置該node為頭結(jié)點(diǎn)即可
        l.headNode = node
        return
    }
    // 將頭指針指向的頭結(jié)點(diǎn)設(shè)置為該節(jié)點(diǎn)的next,并將頭指針指向該節(jié)點(diǎn)
    node.Next = l.headNode
    l.headNode = node
}

5. AddFromTail():

// AddFromTail 向鏈表尾部添加結(jié)點(diǎn)
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 { // 直接遍歷到最后一個(gè)節(jié)點(diǎn)
        currentNode = currentNode.Next
    }
    currentNode.Next = node
}

6. Insert()

// Insert 向鏈表中指定位置添加結(jié)點(diǎn),下標(biāo)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é)點(diǎn)
func (l *LinkedList) DeleteTail() any {
    if l.IsEmpty() {
        fmt.Println("LinkedList is empty")
        return nil
    }
    currentNode := l.headNode
    for currentNode.Next.Next != nil { //如果下下個(gè)節(jié)點(diǎn)為nil,說(shuō)明下個(gè)節(jié)點(diǎn)是最后一個(gè)節(jié)點(diǎn)
        currentNode = currentNode.Next
    }
    data := currentNode.Next.Data
    currentNode.Next = nil // 刪除最后一個(gè)節(jié)點(diǎn)
    return data
}

9. Remove()

// Remove 刪除指定節(jié)點(diǎn)
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ù)第二個(gè)節(jié)點(diǎn)
            if currentNode.Next.Data == data { // 用下一個(gè)節(jié)點(diǎn)去比較(保證尾結(jié)點(diǎn)不被漏掉),頭結(jié)點(diǎn)在上面已經(jīng)比較過(guò)了
                currentNode.Next = currentNode.Next.Next
            } else {
                currentNode = currentNode.Next
            }
        }
    }
}

10. Contain()

// Contain 鏈表中是否包含某個(gè)值的節(jié)點(diǎn)
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
    }
}

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

相關(guān)文章

  • golang string、int、int64 float 互相轉(zhuǎn)換方式

    golang string、int、int64 float 互相轉(zhuǎn)換方式

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

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

    在分布式的系統(tǒng)中,因?yàn)樯婕暗綌?shù)據(jù)的傳輸,所以一定會(huì)進(jìn)行數(shù)據(jù)的交換,此時(shí)就要定義數(shù)據(jù)交換的格式,例如二進(jìn)制、Json、Xml等等。本文總結(jié)了Go語(yǔ)言中的數(shù)據(jù)格式,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • golang int64轉(zhuǎn)int的方法

    golang int64轉(zhuǎn)int的方法

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

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

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

    詳解Go語(yǔ)言中空結(jié)構(gòu)體的慣用法

    空結(jié)構(gòu)體在 Go 編程中有著廣泛的應(yīng)用,本文將詳細(xì)探討空結(jié)構(gòu)體的幾種典型用法,并解釋為何它們?cè)谔囟▓?chǎng)景下非常有用,希望對(duì)大家有所幫助
    2024-11-11
  • 基于context.Context的Golang?loader緩存請(qǐng)求放大問(wèn)題解決

    基于context.Context的Golang?loader緩存請(qǐng)求放大問(wèn)題解決

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

    Go語(yǔ)言如何實(shí)現(xiàn)將[][]byte轉(zhuǎn)為io.Reader

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

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

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

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

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

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

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

最新評(píng)論

天峻县| 八宿县| 天全县| 腾冲县| 鹿邑县| 察哈| 驻马店市| 太仆寺旗| 壤塘县| 保定市| 邮箱| 商丘市| 剑阁县| 沿河| 鄂伦春自治旗| 哈密市| 顺平县| 翁牛特旗| 砀山县| 泗阳县| 丰县| 阜城县| 申扎县| 三台县| 长岛县| 门头沟区| 呼图壁县| 保靖县| 苏尼特右旗| 枝江市| 佛坪县| 景德镇市| 宜宾市| 鄯善县| 综艺| 聊城市| 西安市| 大宁县| 余江县| 夹江县| 宜城市|