// 循环链表
type Ring struct {prev  *Ring       // 前驱节点next  *Ring       // 后驱节点Value interface{} // 数据
}// 初始化空的循环链表,前驱和后驱都指向自己,因为是循环的
func (r *Ring) Init() *Ring {r.next = rr.prev = rreturn r
}// 创建N个节点的循环链表
func New(n int) *Ring {if n <= 0 {return nil}// 创建初始化节点r := new(Ring)// 创建第一个节点p := rfor i := 1; i < n; i++ {// 创建下一个节点p.next = &Ring{prev: p}// 修改当前节点为下一个节点p = p.next}// 最后一个节点的下一个节点为初始化节点p.next = r// 初始化节点的前一个节点为最后一个节点r.prev = preturn r
}// 获取下一个节点
func (r *Ring) Next() *Ring {if r.next == nil {return r.Init()}return r.next
}// 获取上一个节点
func (r *Ring) Prev() *Ring {if r.prev == nil {return r.Init()}return r.prev
}// 获取第N个节点
// 因为链表是循环的,当 n 为负数,表示从前面往前遍历,否则往后面遍历:
func (r *Ring) Move(n int) *Ring {if r.next == nil {return r.Init()}switch {// 一直往前找case n < 0:for ; n < 0; n++ {r = r.prev}// 一直往后找case n > 0:for ; n > 0; n-- {r = r.next}}return r
}// 往节点A,链接一个节点,并且返回之前节点A的后驱节点
// 每次链接的是一个新节点,那么链会越来越长,仍然是一个环。
// 因为只是更改链接位置,时间复杂度为:O(1)。
func (r *Ring) Link(s *Ring) *Ring {n := r.Next()if s != nil {p := s.Prev()r.next = ss.prev = rn.prev = pp.next = n}return n
}// 删除节点后面的 n 个节点
func (r *Ring) Unlink(n int) *Ring {if n < 0 {return nil}return r.Link(r.Move(n + 1))
}// 查看循环链表长度
func (r *Ring) Len() int {n := 0if r != nil {n = 1for p := r.Next(); p != r; p = p.next {n++}}return n
}

Golang循环链表相关推荐

  1. golang sdk后端怎么用_Golang资深后端工程师需要了解的知识点

    前提: 因近段时间,我在考虑新的工作机会,并在自己的以往的工作内容做了一些简单的总结,以及部分在面试过程当中遇到了一些新的问题,总结一篇关于Golang工程师针对后端开发的一些知识点. 本文仅作为参考 ...

  2. 通过示例学 Golang 2020 中文版【翻译完成】

    原文:GolangByExample 协议:CC BY-NC-SA 4.0 阶段:机翻(1) 人最大的痛苦就是说一些自己都不相信的话.--燕京学堂鹿会 在线阅读 在线阅读(Gitee) ApacheC ...

  3. golang个人整理知识点

    环境变量: GOPATH: window下默认值路径为%USERPROFILE%/go,可以删掉新建,然后所有的项目代码放在src子目录下 GOPATH路径下有三个目录src pkg bin 具体的子 ...

  4. GoLang之channel底层的数据结构是什么、channel的创建(2)

    文章目录 GoLang之channel底层的数据结构是什么.channel的创建(2) 1.数据结构 2.创建 GoLang之channel底层的数据结构是什么.channel的创建(2) 1.数据结 ...

  5. golang开发需要掌握的核心包以及中间件,涵盖项目的各个领域

    常用包 常用包 说明 fmt 实现格式化的输入输出操作,其中的fmt.Printf()和fmt.Println()是开发者使用最为频繁的函数. io 实现了一系列非平台相关的IO相关接口和实现,比如提 ...

  6. 算法和数据结构(golang语言实现)

    算法和数据结构(golang语言实现) 第1节 选择.冒泡.插入.复杂度 选择排序 选择排序 时间复杂度为O(N^2) 额外空间复杂度O(1) 过程: arr[0-N-1]范围上,找到最小值所在的位置 ...

  7. Golang 面试总结

    相比较于其他语言, Go 有什么优势或者特点 Go 允许跨平台编译,编译出来的是二进制的可执行文件,直接部署在对应系统上即可运行 Go 在语言层面上天生支持并发编程,通过 goroutine 和 ch ...

  8. golang数据结构与算法——稀疏数组、队列和链表

    文章目录 一 稀疏数组 1.1 先看一个实际的需求 1.2 稀疏数组基本介绍 1.3 稀疏数组举例说明 1.4 把数组转换为稀疏数组实现 1.5 把稀疏数组还原为原数组 二 队列 2.1 队列的介绍 ...

  9. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析

    目录[阅读时间:约10分钟] 一.概述 二.对比: gorilla/mux与net/http DefaultServeMux 三.简单使用 四.源码简析 1.NewRouter函数 2.HandleF ...

最新文章

  1. 程序员崩溃的40多个瞬间!!!太形象了,你遇到过几个?
  2. python3 读取文件的最后一行 非空行
  3. JavaScript对象、JSON对象、JSON字符串的区别
  4. 将z-blog改成英文blog所遇到的问题
  5. 界面发布2019中国最富1000人榜:凛冬望春,马云问鼎中国首富
  6. 自然语言处理实践Task4
  7. element表格表头显示斜杠
  8. 图片转excel软件有哪些?这些软件你值得拥有
  9. 台式机连接蓝牙音响没声音 以及 声音延迟 问题解决
  10. 墨天轮访谈 | 腾讯张铭:带你探索王者荣耀背后的游戏数据库 TcaplusDB
  11. 计算机技术与软件专业技术资格(水平)考试岗位设置与描述
  12. ASAN和HWASAN原理解析
  13. 用DevExpress.Xpo 直接维护后台的 数据表,在这四列中录入的数据,即时插入或更新到关联的数据表中
  14. 电商类目表创建类目树
  15. Android开发-Notification通知栏通知最基础运用
  16. 工具 | Windows 功能猎手 (WFH)
  17. 生态 | 人大金仓与超聚变的多个产品完成兼容认证
  18. 腾讯广告算法大赛2020-广告产品种类单特征-入门级
  19. 无忧全国计算机二级模拟软件,无忧全国计算机等级考试超级模拟软件
  20. C++中野指针问题以及如何杜绝野指针

热门文章

  1. 西浦计算机网络题目,“你说我猜”如何让计算机根据语言描述对应图中物体?西浦研究成果获国际顶级人工智能期刊发表...
  2. 关于EAD: Elastic-Net Attacks to Deep Neural Networks via Adversarial Examples的理解
  3. VsCode 开发Go插件配置环境配置
  4. 计算机毕业设计springboot+vue基本安卓/微信小程序的驾校考试预约系统 uniapp
  5. scanf输入参数详解
  6. CSDN 5月付费专栏销量榜Top10
  7. RestEasy 调用Rest接口使用详解
  8. Web3的应用及发展
  9. 2018 华中科技大学校赛 L Fresh Air BFS
  10. 生活不止眼前的苟且,还有适合远方的田野01