【问题标题】:An interview question一个面试题
【发布时间】:2010-02-03 08:00:55
【问题描述】:

给定一个 T 大小的链表,选择前 2n 个节点并从中删除前 n 个节点;然后对接下来的 2n 个节点执行此操作,依此类推...

例如- 让我们考虑一个大小为 7 的链表:

  `1->2->3->4->5->6->7`

如果 n = 2,则所需的输出为:

  `1->2->5->6->7`

我不明白这个问题实际上是什么意思。有人可以帮我理解这个问题吗?

编辑:添加 C 和 C++ 标签以便吸引更多眼球,当然这只是面试本身允许的两种语言。

【问题讨论】:

  • 你的问题陈述和例子相互矛盾。
  • @Alok :是的,但我完全复制了呈现给我的内容。
  • “第一个”似乎应该是“最后一个”,即“选择 2n 个第一个节点并从中删除 最后一个 n 个节点”。
  • @nthgreek:那么,你应该要求澄清一下。这个问题,就目前而言,没有任何意义。正如其他人所说,您的意思可能是“最后一个”,而不是“第一个”。
  • ... 即便如此,使用该描述我也会删除 7 (属于第二个块的后半部分,恰好是不完整的)。在面试中,对手头问题的理解是我要测试的事情之一。这并不意味着从对问题的第一次阐述中理解,而是在在进行任何工作之前他们提出了尽可能多的问题以获得所有要求。否则你最终会为错误的问题编写代码解决方案。

标签: c++ c algorithm


【解决方案1】:

实际上看起来应该这样说:

给定一个大小为 T 的链表,选择前 2n 个节点并从中删除 last n 个节点;然后对接下来的 2n 个节点执行此操作,依此类推...

或:

给定一个大小为 T 的链表,选择前 2n 个节点并从中保留前 n 个节点;然后对接下来的 2n 个节点执行此操作,依此类推...

这意味着选择 1,2,3,4 然后删除 3,4(或保留 1,2,这是同一件事)。然后选择5,6,7,8,不行就停。

【讨论】:

  • 是的,声明中似乎有缺陷。最后应该是第一个:)
【解决方案2】:

我认为它比@paxdiablo 指出的更简单......

do
  take n
  skip n
until you run out of elements to take or skip

【讨论】:

    猜你喜欢
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2011-05-15
    • 1970-01-01
    • 2022-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多