12.17 循环链表(感谢王老师)

循环链表中没有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结点


















全部评论

相关推荐

05-12 17:28
已编辑
门头沟学院 硬件开发
ldf李鑫:不说公司名祝你以后天天遇到这样的公司
点赞 评论 收藏
分享
头顶尖尖的程序员:我也是面了三四次才放平心态的。准备好自我介绍,不一定要背熟,可以记事本写下来读。全程控制语速,所有问题都先思考几秒,不要急着答,不要打断面试官说话。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务