go 标准库 container list
文章目录
- list
- Element 类型
- List 类型
- New 函数
- (*List) Back 方法
- (*List) Front 方法
- (*List) Init 方法
- (*List) InsertAfter 方法
- (*List) InsertBefore 方法
- (*List) Len 方法
- (*List) MoveAfter 方法
- (*List) MoveBefore 方法
- (*List) MoveToBack 方法
- (*List) MoveToFront 方法
- (*List) PushBack 方法
- (*List) PushBackList 方法
- (*List) PushFront 方法
- (*List) PushFrontList 方法
- (*List) Remove 方法
list
个双链表(doubly linked list)
如何遍历链表,
其中 l 为 *List :
for e := l.Front(); e != nil; e = e.Next() {
//链表的每一个元素中通过Next()指针指向下一个元素,直至遍历完成
}
代码:
package main
import (
"fmt"
"container/list"
)
func main() {
l := list.New()
l.PushFront(1)
l. PushBack(2)
l. PushBack(3)
l. PushBack(4)
// 遍历链表
for e := l.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}
执行结果:
1
2
3
4
Element 类型
Element 用于代表双链表的元素
type Element struct {
// 储存在这个元素里面的值
Value interface{}
}
(*Element) Next 方法;
func (e *Element) Next() *Element
返回链表中的下一个元素或者 nil 。
(*Element) Prev 方法
func (e *Element) Prev() *Element
返回链表中的前一个元素或者 nil 。
List 类型
List 用于表示双链表
空列表可以用作 List 的零值
type List struct {
}
New 函数
func New() *List
返回一个初始化后的链表。
(*List) Back 方法
func (l *List) Back() *Element
返回链表的最后一个元素或者 nil 。
(*List) Front 方法
func (l *List) Front() *Element
返回链表的第一个元素或者 nil 。
(*List) Init 方法
func (l *List) Init() *List
初始化或者清空链表
(*List) InsertAfter 方法
func (l *List) InsertAfter(v interface{}, mark *Element) *Element
将一个包含了值 v 的新元素 e 添加到元素 mark 的后面, 并返回 e 作为结果。
如果 mark 不是链表的元素, 那么不对链表做任何动作。
(*List) InsertBefore 方法
func (l *List) InsertBefore(v interface{}, mark *Element) *Element
将一个包含了值 v 的新元素 e 添加到元素 mark 的前面, 并返回 e 作为结果。
如果 mark 不是链表的元素, 那么不对链表做任何动作。
(*List) Len 方法
func (l *List) Len() int
返回链表包含的元素数量。 该方法的复杂度为 O(1) 。
(*List) MoveAfter 方法
func (l *List) MoveAfter(e, mark *Element)
将元素 e 移动至元素 mark 之后
如果 e 或者 mark 不是链表的元素, 又或者 e == mark , 那么不对链表做任何动作。
(*List) MoveBefore 方法
func (l *List) MoveBefore(e, mark *Element)
将元素 e 移动至元素 mark 之前。
如果 e 或者 mark 不是链表的元素, 又或者 e == mark , 那么不对链表做任何动作
(*List) MoveToBack 方法
func (l *List) MoveToBack(e *Element)
将元素 e 移动到链表的末尾。
如果 e 不是链表的元素, 那么不对链表做任何动作。
(*List) MoveToFront 方法
func (l *List) MoveToFront(e *Element)
将元素 e 移动到链表的开头。
如果 e 不是链表的元素, 那么不对链表做任何动作。
(*List) PushBack 方法
func (l *List) PushBack(v interface{}) *Element
将包含了值 v 的元素 e 插入到链表的末尾并返回 e 。
(*List) PushBackList 方法
func (l *List) PushBackList(other *List)
将链表 other 的副本插入到链表 l 的末尾。 other 和 l 可以是同一个链表。
(*List) PushFront 方法
func (l *List) PushFront(v interface{}) *Element
将包含了值 v 的元素 e 插入到链表的开头并返回 e 。
(*List) PushFrontList 方法
func (l *List) PushFrontList(other *List)
将链表 other 的副本插入到链表 l 的开头。 other 和 l 可以是同一个链表。
(*List) Remove 方法
func (l *List) Remove(e *Element) interface{}
如果 e 是链表 l 中的元素, 那么移除元素 e