循环链表中没有NULL指针
表的操作常常是在表的首尾位置上进行

常常用尾指针表示单循环链表
a1的存储位置是:R->next->nextan的存储位置是:R

举个例子:带尾指针循环链表的合并(将Tb合并在Ta之后)
有哪些操作:
        p存表头结点;
        Tb表头连接到Ta表尾;
        释放Tb表头结点;
        修改指针;



双向链表

双向链表:在单链表的每个结点里再增加一个指向其直接前驱的指针域prior
这样链表中就形成了有两个方向不同的链,故称为双向链表

首元结点的前一个结点是头结点,再往前就没有结点了,所以头结点没有指向前面的指针域prior。

双向循环链表
(1)让头节点的前驱指针指向链表的最后一个结点
(2)让最后一个结点的后继指针指向头结点

双向链表的对称性

求链表的长度:一根链就可以找到
求某个结点:一根链就可以做到

插入和删除时,与单链表不同,这时需同时修改两个方向上的指针,这两个操作的时间复杂度都均为O(n)


双向链表的插入:(四步)    O(n)
        s->prior = p->prior;
        p->prior->next = s;
        s->next = p;
        p->prior = s;



双向链表的删除    O(n)

a结点的后继应变为b结点
b结点的前驱应变为a结点