Golang之单链表实现

一.单链表基本概念

单链表是一种顺序存储的结构。 
有一个头结点,没有值域,只有连域,专门存放第一个结点的地址。 
有一个尾结点,有值域,也有链域,链域值始终为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.从链表头部添加元素

(*) () *{
   := &{: }
   .= ..= }


5. 从链表尾部添加元素


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

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

8.删除指定位置的元素

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

10. 遍历链表所有节点

三.测试代码与效果

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

测试代码:


测试结果:

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


注明:区块链学习联盟是本人开设的微信公众号,所以此处仍申明为原创。

猜你喜欢

转载自blog.51cto.com/clovemfong/2149928