循环链表

环形链表

概念

是单向链表的特例。将单向链表的尾结点,指向第一个数据结点(不是头结点)

循环链表数据结点
type LinkNode struct {
    Data interface{}
    Next *LinkNode
}
循环链表的方法
1. 创建链表 Create(数据)
2. 打印链表 Print()
3. 获取结点个数 Length() int
4. 插入结点 Insert(index, 数据)
5. 删除结点 Delete(index)
6. 销毁链表 Destroy()
go实现

创建循环链表:

1. 容错
2. 将 node 的值保存成 head 。 以便创建结束时,恢复node值。
3. 根据参数 Data 遍历创建 数据结点
   1. new 一个 数据结点,并且依次初始化。
   2. 将当前结点的下一结点赋值为新结点  : node.Next = newNode
   3. 更新新结点为当前结点:node = node.Next
4. 将尾结点的 Next 指向 第一个数据结点。形成逻辑的环形链表 node.Next = head.Next
5. 使用之前保存的 head, 恢复node值。  node = head

[外链图片转存失败(img-QouAvXyu-1563364869193)(课堂笔记.assets/1563356451455.png)]

打印循环链表:

1. 容错
2. 定义标记位置,保存第一个数据结点  start := node.Next
3. 无条件循环, 依次读取所有结点的 数据域
   1. 数据域不为空打印
   2. 判断,当 结点 的 Next 为 start 的时候 (尾结点)。跳出当前循环。
// 打印环形链表 Print
func (node *LinkNode) Print()  {
	if node == nil {
		return
	}
	// 创建一个标记位置
	start := node.Next		// 第一个数据结点

	for {
		node = node.Next
		if node.Data != nil {
			fmt.Print(node.Data, " ")
		}
		if start == node.Next {
			break
		}
	}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值