问答题 什么是循环链表
【正确答案】
【答案解析】循环链表(Circular Linked List)是一种首尾相接的链表,它与单链表的唯一区别在于对尾结点的处理,因为在单链表中尾结点的指针域NULL改为指向头结点就得到了单循环链表。
在单循环链表上的操作基本上与非循环链表相同,只是将原来判断指针是否为NULL变为是否是头指针而已,没有其他较大的变化。图1所示为带头结点的单循环链表。

图1 带头结点的单循环链表
a)非空表 b)空表

对于单链表只能从头结点开始遍历整个链表,而对于单循环链表则可以从表中任意结点开始遍历整个链表。因为有时需要对链表常做的操作是在表尾、表头进行,此时可以改变一下链表的标识方法,不用头指针而用一个指向尾结点的指针rear来标识,可以使得操作效率得以提高。例如,用尾指针rear表示的单循环链表查找开始结点a1和尾结点an就很方便,此时查找时间复杂度都为O(1)。
例如,对两个单循环链表H1、H2的连接操作,是将H2的第一个数据结点接到H1的尾结点,若用头指针标识,则需要找到第一个链表的尾结点,其时间复杂性为O(n);而链表若用尾指针R1、R2来标识,则时间性能为O(1)。操作如下:
p=R1->next; ∥保存R1的头结点指针
R1->next=R2->next->next; ∥头尾连接
free(R2->next); ∥释放第二个表的头结点
R2->next=p; ∥组成循环链表
具体过程如图2所示。