循环链表
循环链表
一种头尾相接的链表,表中最后一个结点的指针域指向头结点 ,整个链表形成一个环即没有NULL指针,因此遍历操作时,终止条件是否等于头指针
优:从表中任一结点出发,均可找到表中其他结点
头指针表示单循环链表:
- 找a1的时间复杂度:O(1)
- 找an的时间复杂度:O(n)
当表的操作常常在首尾进行时可使用尾指针表示单循环链表
- a1存储位置是:r->next->next;时间复杂度:O(1)
- an存储位置是:r;时间复杂度:O(1)
带尾指针循环链表的合并
- p存表头结点:p=Ta->next;
- Tb表头连Ta表尾:Ta->next=Tb->next->next;
- 释放Tb表头结点:free(Tb->next);
- 修改指针:Tb->next=p;
LinkList Connect(LinkList Ta,LinkList Tb){
LinkList p;
p=Ta->next;
Ta->next=Tb->next->next;
free(Tb->next);
Tb->next=p;
return Tb;
}
时间复杂度是O(1)