欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go语言单链表实现方法

程序员文章站 2022-11-15 12:48:19
本文实例讲述了go语言单链表实现方法。分享给大家供大家参考。具体如下: 1. singlechain.go代码如下: 复制代码 代码如下:////////// //单...

本文实例讲述了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语言程序设计有所帮助。