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
}
//单链表 -- 线性表
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))
}
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语言程序设计有所帮助。