循环链表的定义
1.概念与特点
循环链表:是一种头尾相接的链表。
表中的最后一个结点的指针域指向头结点,整个链表形成环状结构。

讯享网
优点:从表中任意一个结点出发均可找到表中其他结点。
补充:
由于循环链表中没有NULL指针,所以涉及到遍历操作时,其终止条件不再像单链表那样判断p或者p->next是否为空,而是判断它们是否等于头指针,如下图所示,

2.循环链表的查找(两种表示法)
- 用头指针表示单循环链表
- 找 a 1 a_1 a1的时间复杂度: O ( 1 ) O(1) O(1)
- 找 a n a_n an的时间复杂度: O ( n ) O(n) O(n)

因为对表的操作常常是在首尾位置上进行,所以该表示方法对于查找首尾元素而言不方便。

- 用尾指针表示单循环链表
- a 1 a_1 a1的存储位置:
R->next->next - a n a_n an的存储位置:R

所以查找首尾元素的时间复杂度为: O ( 1 ) O(1) O(1),所以用尾指针的这种表示法,在操作循环链表时更为方便。
- a 1 a_1 a1的存储位置:
循环链表的合并
这里主要描述带 尾指针的循环链表合并(将Tb合并在Ta之后)

- 具体步骤:
- 1.p保存Ta表的表头结点,即
p=Ta->next。 - 2.将Tb表的表头接到Ta表的表尾,即
Ta->next=Tb->next->next。 - 3.释放Tb表的头结点,即
delete Tb->next。 - 4.修改指针,使Tb的表尾连结到Ta的表头,即
Tb->next=p。

- 1.p保存Ta表的表头结点,即
- 算法描述:
LinkList Connect(LinkList Ta, LinkList Tb) { p = Ta->next; //p存放Ta表的表头结点 Ta->next = Tb->next->next; //Tb表头连结Ta表尾 delete Tb->next; //释放Tb表头结点 Tb->next = p; //修改指针,使Tb的表尾连结到Ta的表头 return Tb; }
讯享网
上述算法的时间复杂度为 O ( 1 ) O(1) O(1)。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/25895.html