Go的List

发布于 2023-10-11  105 次阅读


目标:什么是List链表

什么是List双向链表

Go语言的标准库中包含一个container/list包,这个包实现了双向链表。你可以使用这个包来创建和操作链表。

list查询效率较慢,但是不需要扩容

简单使用

 // 案例
package main
import (
	"container/list"
	"fmt"
)
func main() {
	var myList list.List
	fmt.Println(myList) // 返回结果:{{   } 0}
	myList.PushBack("go")
	myList.PushBack("grpc")
	myList.PushBack("mysql")
	fmt.Println(myList) // 返回结果:{{0x140000741e0 0x14000074240  } 3}
	// 如果打印实际的值,需要遍历打印
	// 正序遍历
	for i := myList.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
	// 返回结果
	// go
	// grpc
	// mysql
	fmt.Println("---------")
	// 反向遍历
	for i := myList.Back(); i != nil; i = i.Prev() {
		fmt.Println(i.Value)
	}
	// 返回结果
	// mysql
	// grpc
	// go
}

List中插入一个数据

 // 案例
package main
import (
	"container/list"
	"fmt"
)
func main() {
	var myList list.List
	fmt.Println(myList) // 返回结果:{{   } 0}
	myList.PushBack("go")
	myList.PushBack("grpc")
	myList.PushBack("mysql")
	
        // list中某个地方插入一个新的数据
	i := myList.Front()
	for ; i != nil; i = i.Next() {
		if i.Value.(string) == "grpc" {
			break
		}
	}
	myList.InsertBefore("gin", i)
	for i := myList.Front(); i != nil; i = i.Next() {
		fmt.Println(i.Value)
	}
	// 返回结果:
	//go
	//gin
	//grpc
	//mysql
}


间歇性凌云壮志,持续性混吃等死