亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時間:2023年03月15日 10:12:32   作者:小象褲衩  
本文主要介紹了Golang實現(xiàn)單鏈表的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(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 { // 直接遍歷到最后一個節(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 { //如果下下個節(jié)點(diǎn)為nil,說明下個節(jié)點(diǎn)是最后一個節(jié)點(diǎn)
        currentNode = currentNode.Next
    }
    data := currentNode.Next.Data
    currentNode.Next = nil // 刪除最后一個節(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ù)第二個節(jié)點(diǎn)
            if currentNode.Next.Data == data { // 用下一個節(jié)點(diǎn)去比較(保證尾結(jié)點(diǎn)不被漏掉),頭結(jié)點(diǎn)在上面已經(jīng)比較過了
                currentNode.Next = currentNode.Next.Next
            } else {
                currentNode = currentNode.Next
            }
        }
    }
}

10. Contain()

// Contain 鏈表中是否包含某個值的節(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實現(xiàn)單鏈表的示例代碼的文章就介紹到這了,更多相關(guān)Golang 單鏈表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言?Channel通道詳解

    Go語言?Channel通道詳解

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

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

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

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

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

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

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