分享
  1. 首页
  2. 文章

golang 实现单链表

赵雍 · · 3046 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

package main
//链表实现
import (
 "fmt"
 "os"
)
//定义错误常量
const (
 ERROR = -1000000001
)
//定义元素类型
type Element int64
//定义节点
type LinkNode struct {
 Data Element //数据域
 Nest *LinkNode //指针域,指向下一个节点
}
//函数接口
type LinkNoder interface {
 Add(head *LinkNode, new *LinkNode) //后面添加
 Delete(head *LinkNode, index int) //删除指定index位置元素
 Insert(head *LinkNode, index int, data Element) //在指定index位置插入元素
 GetLength(head *LinkNode) int //获取长度
 Search(head *LinkNode, data Element) //查询元素的位置
 GetData(head *LinkNode, index int) Element //获取指定index位置的元素
}
//添加 头结点,数据
func Add(head *LinkNode, data Element) {
 point := head //临时指针
 for point.Nest != nil {
 point = point.Nest //移位
 }
 var node LinkNode //新节点
 point.Nest = &node //赋值
 node.Data = data
 head.Data = Element(GetLength(head)) //打印全部的数据
 if GetLength(head) > 1 {
 Traverse(head)
 }
}
//删除 头结点 index 位置
func Delete(head *LinkNode, index int) Element {
 //判断index合法性
 if index < 0 || index > GetLength(head) {
 fmt.Println("please check index")
 return ERROR
 } else {
 point := head
 for i := 0; i < index-1; i++ {
 point = point.Nest //移位
 }
 point.Nest = point.Nest.Nest //赋值
 data := point.Nest.Data
 return data
 }
}
//插入 头结点 index位置 data元素
func Insert(head *LinkNode, index int, data Element) {
 //检验index合法性
 if index < 0 || index > GetLength(head) {
 fmt.Println("please check index")
 } else {
 point := head
 for i := 0; i < index-1; i++ {
 point = point.Nest //移位
 }
 var node LinkNode //新节点,赋值
 node.Data = data
 node.Nest = point.Nest
 point.Nest = &node
 }
}
//获取长度 头结点
func GetLength(head *LinkNode) int {
 point := head
 var length int
 for point.Nest != nil {
 length++
 point = point.Nest
 }
 return length
}
//搜索 头结点 data元素
func Search(head *LinkNode, data Element) {
 point := head
 index := 0
 for point.Nest != nil {
 if point.Data == data {
 fmt.Println(data, "exist at", index, "th")
 break
 } else {
 index++
 point = point.Nest
 if index > GetLength(head)-1 {
 fmt.Println(data, "not exist at")
 break
 }
 continue
 }
 }
}
//获取data 头结点 index位置
func GetData(head *LinkNode, index int) Element {
 point := head
 if index < 0 || index > GetLength(head) {
 fmt.Println("please check index")
 return ERROR
 } else {
 for i := 0; i < index; i++ {
 point = point.Nest
 }
 return point.Data
 }
}
//遍历 头结点
func Traverse(head *LinkNode) {
 point := head.Nest
 for point.Nest != nil {
 fmt.Println(point.Data)
 point = point.Nest
 }
 fmt.Println("Traverse OK!")
}
//主函数测试
func main() {
 var head LinkNode = LinkNode{Data: 0, Nest: nil}
 head.Data = 0
 var nodeArray []Element
 for i := 0; i < 10; i++ {
 nodeArray = append(nodeArray, Element(i+1+i*100))
 Add(&head, nodeArray[i])
 }
 Delete(&head, 3)
 Search(&head, 2032)
 Insert(&head, 23, 10010)
 Traverse(&head)
 fmt.Println("data is", GetData(&head, 6))
 fmt.Println("length:", GetLength(&head))
 os.Exit(0)
}

有疑问加站长微信联系(非本文作者)

本文来自:Segmentfault

感谢作者:赵雍

查看原文:golang 实现单链表

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
3046 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏