循环链表是另一种形式的链表,他的特点是表中最后一个结点的指针域指向头结点,整个链表形成一个环。由此,从表中任一结点出发均可找到表中其他节点。
循环链表的结构图如下:
循环链表的操作和之前的写过的单链表的操作是基本一致的,所以我就不再给出详细的代码,我来说说它们之间的不同:循环链表与单链表的差别在于算法之中的循环条件不是p或者p->next 是否为空,而变成了它们是否等于头指针。
循环链表的特点是无需增加存储量,仅对链接的方式稍作改变,即可使得表处理更加方便灵活。
我们同样找一个例子来说明这个特点:
例如我们在链表上实现将两个线性表(a1,a2,…,an) 和 (b1,b2,…,bn)连接成一个线性表(a1,a2,…,an,b1,b2,…,bn)的预算。
我们如果在单链表上做这种链接操作,我们都需要遍历链表a,首先找到节点an,将b1链接到an的后面,它的复杂度是O(n)。但是如果我们在尾指针表示的单循环表上实现,只需要修改指针,不需要遍历,它的复杂度是O(1)。
这样用尾指针表示的循环链表的示意图如下
我们在实验中通常是用尾指针表示的循环链表,这是因为我们只要找到了尾指针,它的下一个便是头指针,这就相当于我们找到了头指针,但如果我们用头指针表示的循环链表,那么我们如果需要尾指针,我们必须要遍历整个链表。
原文地址:http://blog.csdn.net/fk5431/article/details/45063569