《算法基础》——3.3 双向链表

本节书摘来自华章计算机《算法基础》一书中的第3章,第3.3节,作者:(美)罗德·斯蒂芬斯(Rod Stephens)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

3.3 双向链表

在一个双向链表中,单元格具有指向下一个单元格和前一个单元格的链接。指向前一个单元格的链接通常被称为Prev或Previous。
具有首哨兵和尾哨兵的双向链表往往会很方便,因为程序可以很容易地从链表的任意一端进行操作。例如,可以在O(1)时间里从任意一端添加或删除项。
图3-6显示了一个有顶部和底部哨兵的双向链表:

screenshot

用于操作双向链表的算法和操作单向链表的方法很像,除了在双向链表里需要一些额外的工作去管理链表的第二类链接集合。例如,下面的伪代码展示了在给定单元格之后插入新单元格的算法:
screenshot

这些算法真正棘手的部分是了解在当前链表中哪些链接已经被更新。例如,在前面的算法中,倒数第二个语句设置Prev链接应该指向新的单元格。也许会使用以下的语句来做到这一点:
screenshot

不过,在执行这个语句时,after_me.Next已经被更新为指向新的单元格,所以这是行不通的。该算法需要使用new_cell.Next来代替它。
图3-7展示了该过程:
screenshot

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值