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语言程序设计有所帮助。

相关推荐