首先使用ring.New(3)创建长度为3的空循环链表,再通过循环依次赋值1、2、3,最后遍历输出各节点值。

Go语言中没有内置的循环链表结构,但可以通过container/ring包实现循环列表操作。ring提供了一个双向循环链表的数据结构,每个节点都指向下一个和前一个节点,首尾相连,形成环形结构。
使用ring.New(n)可以创建一个长度为n的循环链表,初始所有节点值为nil。通过Next()和Prev()可以遍历环形结构。
r := ring.New(3)
示例代码:
package main
import (
"container/ring"
"fmt"
)
func main() {
// 创建长度为3的ring
r := ring.New(3)
// 赋值
for i := 0; i < 3; i++ {
r.Value = i + 1
r = r.Next()
}
// 正向遍历
r.Do(func(p interface{}) {
fmt.Println(p)
})
}
可以在任意位置插入新节点,或连接两个独立的ring实例。
立即学习“go语言免费学习笔记(深入)”;
r.Link(&newRing)
插入示例:
// 插入值为10的新节点 newR := ring.New(1) newR.Value = 10 r.Next().Link(newR) // 在r的下一个位置插入
Do方法适合只读遍历,而手动移动指针更适合修改或删除场景。
Do(f func(interface{}))遍历所有元素Unlink(n)删除后续n个节点并返回被删子环删除部分节点示例:
// 删除后两个节点
removed := r.Unlink(2)
fmt.Printf("删除了 %d 个节点\n", removed.Len())
基本上就这些。container/ring轻量高效,适用于需要环形缓冲、定时任务调度等场景。注意它不是并发安全的,多协程访问时需自行加锁保护。理解Next/Prev/Link/Unlink这几个核心方法就能灵活应对大多数循环列表需求。
以上就是Golang containerRing循环列表操作示例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号