当前位置 博文首页 > Go语言单链表实现方法

    Go语言单链表实现方法

    作者:OSC首席键客 时间:2021-02-15 18:33

    本文实例讲述了Go语言单链表实现方法。分享给大家供大家参考。具体如下:

    1. singlechain.go代码如下:

    复制代码 代码如下:
    //////////
    //单链表 -- 线性表
    package singlechain
    //定义节点
    type Node struct {
        Data int
        Next *Node
    }
    /*
    * 返回第一个节点
    * h 头结点
     */
    func GetFirst(h *Node) *Node {
        if h.Next == nil {
            return nil
        }
        return h.Next
    }
    /*
    * 返回最后一个节点
    * h 头结点
     */
    func GetLast(h *Node) *Node {
        if h.Next == nil {
            return nil
        }
        i := h
        for i.Next != nil {
            i = i.Next
            if i.Next == nil {
                return i
            }
        }
        return nil
    }
    //取长度
    func GetLength(h *Node) int {
        var i int = 0
        n := h
        for n.Next != nil {
            i++
            n = n.Next
        }
        return i
    }
    //插入一个节点
    //h: 头结点
    //d:要插入的节点
    //p:要插入的位置
    func Insert(h, d *Node, p int) bool {
        if h.Next == nil {
            h.Next = d
            return true
        }
        i := 0
        n := h
        for n.Next != nil {
            i++
            if i == p {
                if n.Next.Next == nil {
                    n.Next = d
                    return true
                } else {
                    d.Next = n.Next
                    n.Next = d.Next
                    return true
                }
            }
            n = n.Next
            if n.Next == nil {
                n.Next = d
                return true
            }
        }
        return false
    }
    //取出指定节点
    func GetLoc(h *Node, p int) *Node {
        if p < 0 || p > GetLength(h) {
            return nil
        }
        var i int = 0
        n := h
        for n.Next != nil {
            i++
            n = n.Next
            if i == p {
                return n
            }
        }
        return nil
    }

    2. main.go代码如下:
    复制代码 代码如下:
    package main
    import "fmt"
    import "list/singlechain"
    func main() {
        //初始化一个头结点
        var h singlechain.Node
        //往链表插入10个元素
        for i := 1; i <= 10; i++ {
            var d singlechain.Node
            d.Data = i
            singlechain.Insert(&h, &d, i)
            fmt.Println(singlechain.GetLoc(&h, i))
        }
        fmt.Println(singlechain.GetLength(&h))
        fmt.Println(singlechain.GetFirst(&h))
        fmt.Println(singlechain.GetLast(&h))
        fmt.Println(singlechain.GetLoc(&h, 6))
    }

    希望本文所述对大家的Go语言程序设计有所帮助。

    js
    下一篇:没有了