【问题标题】:Efficient "Insert" function in linked list链表中的高效“插入”功能
【发布时间】:2012-12-06 08:52:04
【问题描述】:

在一次采访中,我被要求为链表编写一个插入函数,以这样的方式插入后,与插入元素相比,插入元素头部的元素应该更大,而尾部的元素应该更小元素。

我在我的代码中实现了以下步骤:

  1. 最初按降序对链表进行排序。
  2. 获取元素。
  3. 以这样的方式插入元素,即使插入后链表也将按降序排列。

但有人告诉我,我的方法效率不高。

请告诉我是否有有效的方法来达到同样的效果。

【问题讨论】:

  • 认为他们希望您假设链接最初已经排序,并且您的插入应该保持这种排序。 (我会在采访中问这是否确实是意图)。在这种情况下,不需要排序 - 只需迭代直到找到插入位置并插入它。
  • @amit: 不,链接的开头没有排序。
  • 对我来说,@amit 的解释是唯一有意义的。我也想请面试官澄清一下。
  • 好的,所以列表没有排序,你也不能排序。除了插入新元素之外,您是否允许/期望对该列表进行任何更改(例如置换元素)?
  • partition? list.insert(partition(list.begin(),list.end(),element_greater_than(value)),value).

标签: c++ c data-structures linked-list


【解决方案1】:

排序是O(n log n) 操作。如果您仔细阅读问题,他们从不说应该对列表进行排序,所以不要进行排序操作。相反,您应该做的是从一个仅包含您的元素的新列表开始,然后对于原始列表的每个元素,将其附加到前面(如果大于新元素)或后面。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 2016-02-22
    • 1970-01-01
    • 2018-10-08
    • 2018-03-22
    相关资源
    最近更新 更多