循环链表是另一种形式的链表,其特点是表中最后一个结点的指针不再为NULL,而是指向头结点形成一个闭环,从表中任意一处出发均可以找到其他所有元素
尾结点特殊之处在于
tail->next=L;
tail->next!=NULL;
其最终会指向头结点,从而构成闭环
其操作跟普通链表相差不大,不过我们可以进行两个循环链表的合并操作
AB为两个链表,AB分别为两个链表的尾结点,我们可以对这两个循环链表进行操作构成一个循环链表
p=Ta->next;
Ta->next=Tb->next->next;//将Tb的头结点接到Ta的尾结点之后
free(Tb->next);
Tb->next=p;
双向链表:在双向链表的结点中有前后两个结点,一个指向前继,一个指向后继
双向链表的操作中,插入和删除结点较为麻烦
typedef struct DuLNode
{
int data;
struct DuLNode * prior;
struct DuLNode * next;
}DuLNode,*DuLNodeList;
双向链表的插入
void trail(DuLNodeList L)
{
DuLNodeList s;
s->prior=L->prior;
L->prior->next=s;
s->next=L;
L->prior=s;
}
双向链表的删除
void delete(DuLNodeList L)
{
DuLNodeList p;
p->prior->next=p->next;
p->next->prior=p->prior;
free(p);
}