Golang 列表list

列表有很多种实现方法,比如单链表、双链表等

golang中 列表container/list    内部的实现原理是双链表

创建方式:

listName := list.New()

var listName = list.List

插入普通元素

PushFront  PushBack  InsertBefore  InsertAfter

    var l1 list.List  // l1 := list.New() 一样的效果
	a := l1.PushBack("111")
	b := l1.InsertBefore(100,a)
	l1.InsertAfter("2222",b)
    l1.PushFront(200)
	for i:=l1.Front();i != nil;i = i.Next() {
		fmt.Println("l1 Element =", i.Value)
	}
/**
l1 Element = 200
l1 Element = 100
l1 Element = 2222
l1 Element = 111
**/

列表除了支持插入元素外,还支持插入列表。。。

在尾部插入列表语法:PushBackList(other *List)

    l2 := list.New()
	l2.PushFront("3333")
	l2.PushBack("444444")
	l1.PushBackList(l2)
    for i:=l1.Front();i != nil;i = i.Next() {
		fmt.Println("Element =", i.Value)
	}

/*
Element = 200
Element = 100
Element = 2222
Element = 111
Element = 3333
Element = 444444

*/

 在头部插入列表语法:PushFrontList(other *List)

    l3 := list.New()
	l3.PushBack("a3")
	l3.PushFront("a31")
	l3.PushFrontList(l2)
	for i:=l3.Front();i != nil;i = i.Next() {
		fmt.Println("Element =", i.Value)
	}
/*
Element = 3333
Element = 444444
Element = a31
Element = a3

*/

列表删除元素

    l4 := list.New()
	a = l4.PushBack("a")
	b = l4.PushFront("b")
	value := l4.Remove(a)
	fmt.Println(value)
	for i:=l4.Front();i != nil;i = i.Next() {
		fmt.Println("Element =", i.Value)
	}
/*
a
Element = b
*/

list.Remove(nil)   删除空是有问题的!!!!!!!

列表遍历

    for i := l1.Front();i!=nil;i = i.Next(){
		fmt.Println("front--->back:",i.Value)
	}
	fmt.Println("###########################")
	for i := l1.Back();i!= nil;i = i.Prev(){
		fmt.Println("back--->front:",i.Value)
	}

/*
   front--->back: 200
front--->back: 100
front--->back: 2222
front--->back: 111
front--->back: 3333
front--->back: 444444
###########################
back--->front: 444444
back--->front: 3333
back--->front: 111
back--->front: 2222
back--->front: 100
back--->front: 200

*/

列表元素移动

移到元素前

MoveBefore(e, mark *Element)  把e移动到makr 之前。。

如果将指定元素移动到另一元素的前面中的指定元素本来就在另一元素的前面,那么列表不会做任何的改动,或者如果指定元素不是列表中的元素,列表也不会做任何改动。

    l5 := list.New()
	a = l5.PushBack("a")
	b = l5.PushBack("b")
	l5.MoveBefore(b,a)
	for i := l5.Front();i!= nil;i = i.Next(){
		fmt.Println("l1:",i.Value)
	}
/*
b
a
*/

移到元素后  MoveAfter(e, mark *Element)

移到列表最前  MoveToFront(e *Element)

移到列表最后 MoveToBack(e *Element)

获取节点

Front() *Element

Back () *Element

Prev() *Element

Next() *Element

获取长度

Len() int

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值