美文网首页
38.Go语言·数据结构·单向链表

38.Go语言·数据结构·单向链表

作者: 一枼落知天下 | 来源:发表于2019-06-19 19:17 被阅读0次

    main.go

    // Go语言·数据结构
    package main
    
    import (
        "fmt"
    )
    
    var content string = `
    ————————————————Go语言·数据结构————————————————————
    一、链表
        是有序的列表,
    
    二、单链表
            头节点:
                用来标识链表的头,本身不存放数据。
    
    `
    
    // 定义一个节点
    type HeroNode struct {
        no       int
        name     string
        nickname string
        next     *HeroNode //表示指向下一个节点
    }
    
    // 在单链表的最后加入。
    func PushSingleLinkNode(headNode *HeroNode,nextNode *HeroNode) {
        // 思路
        // 1.先找到该链表最后的节点。
        // 2.创建一个辅助节点
        temp := headNode
        for {
            // 找到了链表最后的节点
            if temp.next == nil{
                break       
            }
            // 不断的指向下一个节点
            temp = temp.next
        }
        //最后的节点指向下一个节点 
        temp.next = nextNode
    }
    
    // 在单链表的最后加入。 有序的
    func PushSingleLinkNodeSort(headNode *HeroNode,nextNode *HeroNode) {
        // 思路
        // 1.先找到该链表适当的节点。
        // 2.创建一个辅助节点
        var flag = true
        temp := headNode
        for {
            // 找到了链表最后的节点
            if temp.next == nil{
                break       
            }else if temp.next.no>nextNode.no{
                // 说明nextNode接口,就应该直接插入到temp后面
                break
            }else if temp.next.no==nextNode.no{
                // 链表中已经存在咯,就不允许插入
                flag = false
                break
            }
            // 不断的指向下一个节点
            temp = temp.next
        }
        if !flag {
            fmt.Println("链表中已经存在咯,就不允许插入!")
        }else{
            nextNode.next,temp.next = temp.next, nextNode
        }
    }
    
    
    // 打印链表
    func ListSingleLinkNode(head *HeroNode) {
        // 1.先找到该链表最后的节点。
        // 2.创建一个辅助节点
        temp := head
        
        if temp.next == nil{
            fmt.Println("链表空空如也~~~")        
        }
    
        // 遍历链表
        for {
            fmt.Printf("[%d,%s,%s]===>",
                temp.next.no,temp.next.name,temp.next.nickname)
            // 不断的指向下一个节点
            temp = temp.next
            // 最后一个节点咯。
            if temp.next == nil{
                break   
            }
        }
    }
    
    
    func PopSingleLinkNode(head *HeroNode,id int) {
        var flag = false
        temp := head
        for {
            // 找到了链表最后的节点
            if temp.next == nil{
                break       
            }else if temp.next.no==id{
                flag = true
                break
            }
            // 不断的指向下一个节点
            temp = temp.next
        }
        if flag {
            fmt.Println(temp.name)
            temp.next = temp.next.next
        }else{
            fmt.Println("删除的节点不存在~~")
        }
    }
    
    
    func main() {
        // 1.先创建头节点,空的,默认值
        head := &HeroNode{}
    
        // 创建一个新的节点
        next := &HeroNode{
            no:1,
            name:"宋江",
            nickname :"及时雨",
        }
    
        PushSingleLinkNodeSort(head, next)
    
        next2 := &HeroNode{
            no:4,
            name:"林冲",
            nickname :"豹子头",
        }
        PushSingleLinkNodeSort(head, next2)
    
        next3 := &HeroNode{
            no:2,
            name:"卢俊义",
            nickname :"玉麒麟",
        }
        PushSingleLinkNodeSort(head, next3)
    
        next4 := &HeroNode{
            no:3,
            name:"吴用",
            nickname :"智多星",
        }
        PushSingleLinkNodeSort(head, next4)
    
        ListSingleLinkNode(head)
    
        fmt.Println()
    
        PopSingleLinkNode(head, 2)
    
        ListSingleLinkNode(head)
    
        fmt.Println()
    }
    
    
    
    

    相关文章

      网友评论

          本文标题:38.Go语言·数据结构·单向链表

          本文链接:https://www.haomeiwen.com/subject/clrlqctx.html