所以问题是:从链表if nodes a disappearing once read
的最后一个节点找到第k个节点。这应该只在一次传递中完成。
尽量避免额外的内存
我知道这个问题的平凡解决方案,其中两个指针(p和Q)到头节点,其中p增加N次,之后两个指针都增加。指针Q指向最后n个元素。
但这里的问题有些不同,这里的节点一旦被读取就会消失,所以没有办法使用双指针方法。
在阅读之前请不要关闭问题。因为这个问题是不同的。
谢谢
继续在某个地方存储K个元素,例如,如果K为6,则在遍历链表时在某个地方存储6个最新的读节点,在读取下一个节点时,存储该节点并从已存储的节点中删除最老的读节点。一旦链表结束,您将存储最后K个元素(使用链表或数组等),并且从最后的第K个元素将是最古老的存储元素。
这可能不是最有效的解决方案,因为我一边打字一边思考,但它应该工作。
- 创建大小为K的队列
- 顺序读取列表中的每个元素。
- 在读取每个节点时,复制节点并将其加入队列。如果队列已满,也取消队列。
- 读取列表中的最后一个节点后,将队列解除队列。这是倒数第k个元素