一.单链表基本概念
单链表是一种顺序存储的结构。
有一个头结点,没有值域,只有连域,专门存放第一个结点的地址。
有一个尾结点,有值域,也有链域,链域值始终为NULL。
所以,在单链表中为找第i个结点或数据元素,必须先找到第i - 1 结点或数据元素,而且必须知道头结点,否者整个链表无法访问。
关于链表的概念,此处不细讲了,具体的内容,大家可以自行查找相关数据结构资料.
本文主要通过Golang实现链表的几种常见操作:
判断是否为空的单链表
单链表的长度
从头部添加元素
从尾部添加元素
在指定位置添加元素
删除指定元素
删除指定位置的元素
查看是否包含某个元素
遍历所有元素
二.实现代码以及代码注释
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.从链表头部添加元素
(*) () *{ := &{: } .= ..= }
5. 从链表尾部添加元素
6. 在链表指定位置添加元素
7. 删除链表指定值的元素
8.删除指定位置的元素
9.查看链表是否包含某个元素
10. 遍历链表所有节点
三.测试代码与效果
创建并向链表中添加元素
测试代码:
测试结果:
2. 判断链表是否为空
测试代码:
:= .{} .(.()) .(.())
测试结果:
3. 在指定位置index=5,value=b处插入元素five_insert_value
.() .() .()
4. 是否包含元素five_insert_value
测试代码:
:= .() .()
测试结果:
isContain[five_insert_value]:true
5. 删除元素five_insert_value
测试代码:
.() .() .() .()
测试结果
链表List当前的数值为: beforeHead 1 2 3 4 a b c d
6.从位置3删除元素index=3,value=3
//注意此时的headNode是值为beforeHead的元素
.() .() .() .()
测试结果
链表List当前的数值为: beforeHead 1 2 4 a b c d
注明:区块链学习联盟是本人开设的微信公众号,所以此处仍申明为原创。