看一下这个库的源代码
结构分析
Element
1 | // Element is an element of a linked list. |
List
1 | // List represents a doubly linked list. |
可以看到List是一个双链表,它存在一个哨兵结点,姑且可以当作是一个头结点(不存放值),然后还包当前链表的长度(不包含头结点)
而头结点内部才包含前后指针,且还包含该结点所在链表的位置,以及自己本身的值
Methods
一些方法的调用
Init && New
1 | // Init initializes or clears list l. |
这两个就是i字面意思,没什么好说的,值得注意的就是Init还有清空的作用
Len && Front && Back
1 | // Len returns the number of elements of list l. |
还是字面意思,很清晰,这库真的香,需要注意的是只有List结点可以调用,普通的结点是不能调用的
Next && Prev
1 | // Next returns the next list element or nil. |
普通节点调用的方法,返回前后结点,root结点值无法调用的
Insert node && value
1 | // insert inserts e after at, increments l.len, and returns e. |
两种插入方式,第一种是插入节点,第二种是插入一个值(程序自动帮你转换成插入一个节点),插入在节点at之后
两种Push
1 | // PushFront inserts a new element e with value v at the front of list l and returns e. |
有点像帮我们实现了两端都可以输入的栈一样
拼接链表
1 | // PushBackList inserts a copy of an other list at the back of list l. |
其他
其他还有不少方法也挺实用的,但是挺清晰的,也没什么大坑,要是有前文的了解,看起来很方便,整个库也就两百多行,以后遇到链表是个不错的偷懒选择
本文作者:
xiaoyuyu
本文链接: http://woaixiaoyuyu.github.io/2020/04/08/Go-container-list/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: http://woaixiaoyuyu.github.io/2020/04/08/Go-container-list/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!