algorithm - 查找单链表的第 k 个最后一个元素:答案解释
问题描述
当您需要找到k
单链接列表的最后一个元素时,通常的天真的方法是执行两次遍历。第一个找到列表的长度,第二个迭代直到(length-k)th
元素。
而优化版本利用了两个指针:
p1
引用列表的头部p2
k
领先于元素p1
这允许我们在到达列表末尾时返回p1
' 元素。p2
我不明白为什么第二种方法比第一种方法更快,因为在这两种情况下,我们都有一个指针在整个列表中迭代,另一个直到(length-k)th
元素。
是因为缓存优化吗?
谢谢。
解决方案
如果您将p2
元素保留k
在后面p1
,那么它并没有太大帮助,因为您必须一起进行相同数量的遍历。
不过,您可以通过使用更多指针来优化该过程。
当您浏览列表时,假设您记住了每个(k/m)th位置的指针,对于某些m。您只需要记住这些指针的最后m+1个。然后,当你到达列表的末尾时,不要从头开始迭代,而是从你记得的最旧的指针开始。它将在末端后面的k和k + (k/m)个元素之间,因此您只需将其向前移动最多k/m 个位置。
推荐阅读
- excel - 使用 ActiveX 组合框中的值的公式未更新
- java - 使用 data-* 属性(HtmlUnit)从 span 元素中获取数据
- javascript - Tampermonkey 中的状态操作
- azure-active-directory - 如何从用户管理的身份显式授予对 AAD 应用程序注册的访问权限?
- c# - 从 DI 容器中注册具有多种类型的通用动作过滤器
- gnome - 如何重新禁用 gnome-shell 40 中的热角?
- javascript - 响应式导航栏:菜单不会消失(CSS 和 JS)
- powershell - getElementsByTagName 显示异常错误
- ios - 如何在 OTA 安装 IPA 文件期间绕过完整性错误?
- css - 如何将背景图像的特定(x,y)点居中到包含它的 CSS 元素的定义(x',y')坐标?