欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang實現單鏈表的示例代碼

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

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 { // 遍歷到倒數第二個節(jié)點
            if currentNode.Next.Data == data { // 用下一個節(jié)點去比較(保證尾結點不被漏掉),頭結點在上面已經比較過了
                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實現單鏈表的示例代碼的文章就介紹到這了,更多相關Golang 單鏈表內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • golang解析xml的方法

    golang解析xml的方法

    這篇文章主要介紹了golang解析xml的方法,結合實例形式分析了Go語言針對xml文件的讀取與解析的相關技巧,需要的朋友可以參考下
    2016-07-07
  • Go使用proto3的踩坑實戰(zhàn)記錄

    Go使用proto3的踩坑實戰(zhàn)記錄

    這篇文章主要給大家介紹了關于Go使用proto3的踩坑記錄,文中通過實例代碼介紹的非常詳細,對大家學習或者會用Go語言具有一定的參考學習價值,需要的朋友可以參考下
    2023-02-02
  • go 下載非標準庫包(部份包被墻了)到本地使用的方法

    go 下載非標準庫包(部份包被墻了)到本地使用的方法

    今天小編就為大家分享一篇go 下載非標準庫包(部份包被墻了)到本地使用的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Go語言變量的聲明實現示例

    Go語言變量的聲明實現示例

    本文主要介紹了Go語言變量的聲明實現示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-03-03
  • GoFrame?gmap遍歷hashmap?listmap?treemap使用技巧

    GoFrame?gmap遍歷hashmap?listmap?treemap使用技巧

    這篇文章主要為大家介紹了GoFrame?gmap遍歷hashmap?listmap?treemap使用技巧的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • 一文帶你搞明白Go中的面向對象

    一文帶你搞明白Go中的面向對象

    這篇文章主要為大家詳細介紹了Go語言中面向對象的相關知識,文中的示例代碼講解詳細,對我們深入了解Go語言有一定的幫助,需要的可以參考一下
    2023-07-07
  • Go語言?Channel通道詳解

    Go語言?Channel通道詳解

    Channel是一個通道,可以通過它讀取和寫入數據,它就像水管一樣,網絡數據通過Channel 讀取和寫入,這篇文章主要給大家介紹了關于Go語言?Channel通道的相關資料,需要的朋友可以參考下
    2023-07-07
  • Go語言多人聊天室項目實戰(zhàn)

    Go語言多人聊天室項目實戰(zhàn)

    這篇文章主要為大家詳細介紹了Go語言多人聊天室項目實戰(zhàn),實現單撩或多撩等多種功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-08-08
  • golang并發(fā)下載多個文件的方法

    golang并發(fā)下載多個文件的方法

    今天小編就為大家分享一篇golang并發(fā)下載多個文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • golang下grpc框架的使用編寫示例

    golang下grpc框架的使用編寫示例

    這篇文章主要為大家介紹了golang下grpc框架的使用編寫示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04

最新評論