在线性表的总结中,随着后续做题复习,发现循环链表的插入删除总结并不充分,在此做补充。
循环单链表:将表中尾结点的指针域改为指向表头结点,整个链表形成一个环。由此从表中任一结点出发均可找到链表中其他结点。 特点:可以循环查找。
循环双链表:形成两个环。可以循环查找;可以通过头结点快速找到尾结点。插入删除:需要修改两个方向的指针
注意:插入、删除在节点之前还是之后,需要修改两个方向的指针。注意看题目要求。
首先将总结的代码以表格的形式展现。
p之后插入s |
p之前插入s |
删除p的后继s |
删除p |
s->next=p->next; p->next=s; s->prior=p; s->next->prior=s; |
s->prior=p->prior; p->prior=s; s->next=p; s->prior->next=s; |
p->next->next->prior=p; p->next=p->next->next;
|
p->prior->next=p->next; p->next->prior=p->prior; |
接下来进行分别的讲解。
1,插入操作
(1)p节点之后进行插入
操作1,2必须在4前,防止b及b的后继丢失。和单链表的操作相似。
操作如下:
1,s->next=p->next;
2,p->next=s;
3,s->prior=p;
4,s->next->prior=s;
(2)p节点之前进行插入
1,s->prior=p->prior;
2,p->prior=s;
3,s->next=p;
4,s->prior->next=s;
2,删除操作
(1)删除p的后继s
1,p->next->next->prior=p;
2,p->next=p->next->next;
必须先1,后2,防止后续c节点丢失。
(2)删除p
1,p->prior->next=p->next;
2,p->next->prior=p->prior;
1,2没有先后顺序之分,都能找到后续节点。可以1,2,也可以2,1.