golang链表——list标准库

转自:https://blog.csdn.net/benben_2015/article/details/79365791

仅做个人备份,浏览请看原文

container中的list包实现了双向链表的功能,下面对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) {}会在链表的前面插入另一个链表

猜你喜欢

转载自blog.csdn.net/chushoufengli/article/details/115050279