数据结构之循环链表

循环链表是数据结构中链表的一种形式。相对于单向链表,将单向链表的尾结点的指针域指向该单向链表的头结点,就构成了循环链表。

可以这么理解,单向链表就是一张单程火车票,比如你要从北京坐火车去上海,路上经过济南、南京,此时北京、济南、南京、上海就构成了单向链表的四个结点,如下图所示。


但是,单向链表是有去无回的,也就是从北京去了上海,那你就永远别回来了。那如果想回北京怎么办?而且是想舒服地回去(坐飞机回去),此时就去买张上海到北京的机票,也就是将上海和北京直接连起来,起点是上海,终点是北京。这也就构成了本文所说的循环链表。如下图所示。


循环链表包括两种形式:一种为不带头结点的循环链表,即任何一个结点都可以当作头结点,如上图所示;另一种为带头结点的循环链表,如下图所示。一般来说,该头结点内容或者为空,或者可以记录链表长度等信息。


由于在数据结构之链表单向操作总结一文中已经详细总结了单向链表的各种操作,且循环链表也比较好理解,在此就不写过多的示例,只写一个在循环链表中查找结点的算法来抛砖引玉吧。

public Node searchItem(Object data) {
		Node p = m_headNode.getNext();
		while(p != m_headNode) {
			if(p.getData() == data) {
				return p;
			}
			p = p.getNext();
		}
		return null;
	}

与单向链表比较,循环链表可以从任意结点出发遍历整个链表,这也是循环链表的优势所在。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值