Go list标准包

container中的list包实现了双向链表的功能,下面对list.go中的常用函数进行简单说明。

list.go

Element表示链表中的元素。

type Element struct {
    next, prev *Element
    list       *List       //该元素所在的列表
    value      interface{} //元素中存储的值
}

Next()和Prev()函数

func (e *Element) Next() *Element {}会返回元素"e"的下一个元素。
func (e *Element) Prev() *Element {}会放回元素"e"的前一个元素。

List表示双向链表,一般用l简化来表示。

type List struct {
    root Element  //链表的根元素,该元素的前一个元素和下一个元素是其自身
    len  int      //链表的长度
}

l.Front()表示列表首元素的前一个元素,l.Back()表示最后一个列表元素的下一个元素。

func (l *List) Front() *Element {}获取链表中的第一个元素,如果链表的长度为0,则会返回nil。
func (l *List) Back() *Element {}获取链表中的最后一个元素,如果链表的长度为0,则会返回nil。

有关初始化列表的函数

func (l *List) Init() *List {}初始化一个链表,或清空一个链表
func New() *List { return new(List).Init() }返回一个初始化后的链表
func (l *List) Len() int { return l.len }返回链表"l"的元素个数。

在列表中插入元素

func (l *List) insert(e, at *Element) *Element {}在链表元素"at"的后面插入一个元素,最后返回元素"e"
func (l *List) insertValue(v interface{}, at *Element) *Element {}会在元素"at"的后面插入一个元素,插入元素的值为"v"。最后返回元素"e"

func (l *List) PushFront(v interface{}) *Element {}会在链表第一个元素前插入一个元素值为"v"的元素,最后返回插入的元素。
func (l *List) PushBack(v interface{}) *Element {}会在链表的最后一个元素后插入一个元素值为"v"的元素,最后返回插入的元素。

func (l *List) InsertBefore(v interface{}, mark *Element) *Element {}会在链表元素mark的前面插入一个值为"v"的元素,如果mark不属于链表"l",则该操作不会进行。
func (l *List) InsertAfter(v interface{}, mark *Element) *Element {}会在链表元素mark的后面插入一个值为"v"的元素,如果mark不属于链表"l",则该操作不会进行。

从列表中移除元素

func (l *List) remove(e *Element) *Element {}从链表中移除元素"e",并返回元素"e"
func (l *List) Remove(e *Element) interface{} {}从链表中移除元素"e",并返回元素"e"的值

移动列表中的元素

func (l *List) MoveToFront(e *Element) {}会将元素e移动到链表的首部,如果元素"e"不是链表中的元素,则不会进行修改。
func (l *List) MoveToBack(e *Element) {}会将元素e移动到链表的尾部,如果元素"e"不是链表中的元素,则不会进行修改。

func (l *List) MoveBefore(e, mark *Element) {}会将元素"e"移动到元素"mark"的前面,如果"mark"不是链表中的元素或者传入的两个参数相等,则不进行修改
func (l *List) MoveAfter(e, mark *Element) {}会将元素"e"移动到元素"mark"的后面,如果"mark"不是链表中的元素或者传入的两个参数相等,则不进行修改

在链表前后插入链表

func (l *List) PushBackList(other *List) {}会在链表的后面插入另一个链表
func (l *List) PushFrontList(other *List) {}会在链表的前面插入另一个链表
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值