一.操作List
直接使用container/list包下的New()新建一个空的List
mylist := list.New()fmt.Println(mylist) //输出list中内容fmt.Println(mylist.Len()) //查看链表中元素的个数fmt.Printf("%p", mylist) //输出地址
Go语言标准库中提供了很多向双向链表中添加元素的函数
//添加到最后,List["a"]mylist.PushBack("a")//添加到最前面,List["b","a"]mylist.PushFront("b")//向第一个元素后面添加元素,List["b","c","a"]mylist.InsertAfter("c", mylist.Front())//向最后一个元素前面添加元素,List["b","c","d","a"]mylist.InsertBefore("d", mylist.Back())
取出链表中的元素
fmt.Println(mylist.Back().Value) //最后一个元素的值fmt.Println(mylist.Front().Value) //第一个元素的值//只能从头向后找,或从后往前找,获取元素内容n := 5var curr *list.Elementif n > 0 && n <= mylist.Len() {if n == 1 {curr = mylist.Front()} else if n == mylist.Len() {curr = mylist.Back()} else {curr = mylist.Front()for i := 1; i < n; i++ {curr = curr.Next()}}} else {fmt.Println("n的数值不对")}//遍历所有值for e := mylist.Front(); e != nil; e = e.Next() {fmt.Println(e.Value)}
移动元素的顺序
mylist.MoveToBack(mylist.Front()) //把第一个移动到后面mylist.MoveToFront(mylist.Back()) //把最后一个移动到前面mylist.MoveAfter(mylist.Front(),mylist.Back())//把第一个参数元素,移动到第二个参数元素后面mylist.MoveBefore(mylist.Front(),mylist.Back())//把第一个参数元素,移动到第二个参数元素前面
删除元素
mylist.Remove(mylist.Front())
