algorithm - 获取链表中倒数第 n 个元素

标签 algorithm linked-list

我们有一个大小为 L 的链表,我们想要检索倒数第 n 个元素。

解决方案一:天真的解决方案

  • 从头到尾进行第一次遍历计算L
  • 从起点到预期位置进行第二次传球

方案二:使用2个指针p1,p2

  • p1从头开始迭代,p2不动。
  • 当p1和p2之间有n个元素时,p2也开始迭代
  • 当p1到达链表末尾时,p2在预期位置

这两种解决方案似乎具有相同的时间复杂度(即 2L - n 对列表元素的迭代) 哪个更好?

最佳答案

这两种算法都是两次通过的。对于相当小的 n,第二个可能有更好的性能,因为第二遍访问已经被第一遍缓存的内存。 ( channel 是交错的。)

一次性解决方案会将指针存储在循环缓冲区或队列中,并在到达列表末尾时返回队列的“头”。

关于algorithm - 获取链表中倒数第 n 个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18819023/

相关文章:

c - 使用链接列表建模教室线

java - 链表中会发生什么?

python - LeetCode 509 : Fibonacci Number "int object not subscriptable"

c - 在链表的 "struct name *next"内添加 "struct name"的目的是什么?我的意思是我实际上无法处理到底发生了什么

c - XOR 链表 XOR 函数

algorithm - 为什么我们应该在 <algorithm> 头的函数之前使用 std 命名空间而不应该在 <cmath> 头的函数之前使用它?

java - 双循环链表GetData方法

javascript - 为什么我没有定义参数时会出现无限循环?

c++ - 对于 O(1) 中给定的整数 x,如何得到最小的 n,即 2 ^ n >= x?

algorithm - 这可以用线段树正确建模吗?