一.操作List

  • 直接使用container/list包下的New()新建一个空的List

    1. mylist := list.New()
    2. fmt.Println(mylist) //输出list中内容
    3. fmt.Println(mylist.Len()) //查看链表中元素的个数
    4. fmt.Printf("%p", mylist) //输出地址
  • Go语言标准库中提供了很多向双向链表中添加元素的函数

    1. //添加到最后,List["a"]
    2. mylist.PushBack("a")
    3. //添加到最前面,List["b","a"]
    4. mylist.PushFront("b")
    5. //向第一个元素后面添加元素,List["b","c","a"]
    6. mylist.InsertAfter("c", mylist.Front())
    7. //向最后一个元素前面添加元素,List["b","c","d","a"]
    8. mylist.InsertBefore("d", mylist.Back())
  • 取出链表中的元素

    1. fmt.Println(mylist.Back().Value) //最后一个元素的值
    2. fmt.Println(mylist.Front().Value) //第一个元素的值
    3. //只能从头向后找,或从后往前找,获取元素内容
    4. n := 5
    5. var curr *list.Element
    6. if n > 0 && n <= mylist.Len() {
    7. if n == 1 {
    8. curr = mylist.Front()
    9. } else if n == mylist.Len() {
    10. curr = mylist.Back()
    11. } else {
    12. curr = mylist.Front()
    13. for i := 1; i < n; i++ {
    14. curr = curr.Next()
    15. }
    16. }
    17. } else {
    18. fmt.Println("n的数值不对")
    19. }
    20. //遍历所有值
    21. for e := mylist.Front(); e != nil; e = e.Next() {
    22. fmt.Println(e.Value)
    23. }
  • 移动元素的顺序

    1. mylist.MoveToBack(mylist.Front()) //把第一个移动到后面
    2. mylist.MoveToFront(mylist.Back()) //把最后一个移动到前面
    3. mylist.MoveAfter(mylist.Front(),mylist.Back())//把第一个参数元素,移动到第二个参数元素后面
    4. mylist.MoveBefore(mylist.Front(),mylist.Back())//把第一个参数元素,移动到第二个参数元素前面
  • 删除元素

    1. mylist.Remove(mylist.Front())