golang:list 分手后的思念是犯贱 2022-03-01 08:16 123阅读 0赞 # 初始化列表 # list 的初始化有两种方法:分别是使用 New() 函数和 var 关键字声明,两种方法的初始化效果都是一致的。 1. 通过 container/list 包的 New() 函数初始化 list 变量名 := list.New() 1. 通过 var 关键字声明初始化 list var 变量名 list.List 列表与切片和 map 不同的是,列表并没有具体元素类型的限制,因此,列表的元素可以是任意类型,这既带来了便利,也引来一些问题,例如给列表中放入了一个 interface\{\} 类型的值,取出值后,如果要将 interface\{\} 转换为其他类型将会发生宕机。 # 在列表中插入元素 # 双链表支持从队列前方或后方插入元素,分别对应的方法是 PushFront 和 PushBack。 l := list.New() l.PushBack("fist") l.PushFront(67) 列表插入元素的方法如下表所示。 ![在这里插入图片描述][c7e1575970ba41b39bef0709e9599332.png] # 从列表中删除元素 # 列表插入函数的返回值会提供一个 \*list.Element 结构,这个结构记录着列表元素的值以及与其他节点之间的关系等信息,从列表中删除元素时,需要用到这个结构进行快速删除。 package main import "container/list" func main() { l := list.New() // 尾部添加 l.PushBack("canon") // 头部添加 l.PushFront(67) // 尾部添加后保存元素句柄 element := l.PushBack("fist") // 在fist之后添加high l.InsertAfter("high", element) // 在fist之前添加noon l.InsertBefore("noon", element) // 使用 l.Remove(element) } # 遍历列表——访问列表的每一个元素 # 遍历双链表需要配合 Front() 函数获取头元素,遍历时只要元素不为空就可以继续进行,每一次遍历都会调用元素的 Next() 函数,代码如下所示。 l := list.New() // 尾部添加 l.PushBack("canon") // 头部添加 l.PushFront(67) for i := l.Front(); i != nil; i = i.Next() { fmt.Println(i.Value) } ![在这里插入图片描述][0a521ed8a9b744e2966aa4a6009807fe.png] [c7e1575970ba41b39bef0709e9599332.png]: /images/20220301/f51d992d5c58488eabe2ca838a59bf3c.png [0a521ed8a9b744e2966aa4a6009807fe.png]: /images/20220301/f63029acbdb444adbe0b6fbac01bcb45.png
还没有评论,来说两句吧...