Golang之单链表实现

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

一.单链表基本概念

单链表是一种顺序存储的结构。 
有一个头结点,没有值域,只有连域,专门存放第一个结点的地址。 
有一个尾结点,有值域,也有链域,链域值始终为NULL。 
所以,在单链表中为找第i个结点或数据元素,必须先找到第i - 1 结点或数据元素,而且必须知道头结点,否者整个链表无法访问。

关于链表的概念,此处不细讲了,具体的内容,大家可以自行查找相关数据结构资料.

本文主要通过Golang实现链表的几种常见操作:

  1. 判断是否为空的单链表

  2. 单链表的长度

  3. 从头部添加元素

  4. 从尾部添加元素

  5. 在指定位置添加元素

  6. 删除指定元素

  7. 删除指定位置的元素

  8. 查看是否包含某个元素

  9. 遍历所有元素


二.实现代码以及代码注释

1. 定义结构体

package linkedList

import "fmt"

type Object interface{}

type Node struct {
Data Object //定义数据域
  Next *Node  //定义地址域(指向下一个表的地址)
}

type List struct {
headNode *Node //头节点
}


2.判断链表是否为空


3. 获取列表长度


func (this *List) Length() int {
//获取链表头结点
  cur := this.headNode
  //定义一个计数器,初始值为0
  count := 0

  for cur != nil {
//如果头节点不为空,则count++
     count ++
//对地址进行逐个位移
     cur = cur.Next
  }
return count
}


4.从链表头部添加元素


func (this *List) Add(data Object) *Node {
node := &Node{Data: data}
node.Next = this.headNode
  this.headNode = node
  return node
}

5. 从链表尾部添加元素


6. 在链表指定位置添加元素

7. 删除链表指定值的元素

8.删除指定位置的元素

9.查看链表是否包含某个元素

10. 遍历链表所有节点

三.测试代码与效果

  1. 创建并向链表中添加元素

测试代码:


测试结果:

2. 判断链表是否为空

测试代码:

list2 := linkedList.List{}
fmt.Printf("list 是否为空链表:%t\n", list.IsEmpty())
fmt.Printf("list2 是否为空链表:%t\n", list2.IsEmpty())

测试结果:

3. 在指定位置index=5,value=b处插入元素five_insert_value

list.Insert(5,"five_insert_value")
fmt.Print("链表List当前的数值为:")
list.ShowList()

4. 是否包含元素five_insert_value

测试代码:

isContain := list.Contain("five_insert_value")
fmt.Printf("isContain[five_insert_value]:%t",isContain)

测试结果:

isContain[five_insert_value]:true

5. 删除元素five_insert_value

测试代码:

list.Remove("five_insert_value")
fmt.Print("链表List当前的数值为:")
list.ShowList()
fmt.Println()

测试结果

链表List当前的数值为:   beforeHead 1  2  3  4  a  b  c  d



6.从位置3删除元素index=3,value=3

//注意此时的headNode是值为beforeHead的元素
list.RemoveAtIndex(3)
fmt.Print("链表List当前的数值为:")
list.ShowList()
fmt.Println()

测试结果

链表List当前的数值为:   beforeHead 1  2  4  a  b  c  d



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

本文来自:51CTO博客

感谢作者:暗黑魔君

查看原文:Golang之单链表实现

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

10912 次点击  ∙  1 赞  
加入收藏 微博
被以下专栏收入,发现更多相似内容
2 回复  |  直到 2019-07-22 15:22:53
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传