C++ “高效”;插入“;链表中的函数

C++ “高效”;插入“;链表中的函数,c++,c,data-structures,linked-list,C++,C,Data Structures,Linked List,在一次采访中,我被要求为链表编写一个插入函数,插入后,与插入元素相比,朝向插入元素头部的元素应该更大,尾部应该更小 我在代码中实现了以下步骤: 首先按降序对链表进行排序 获取元素 插入元素时,即使在插入后,链表也将按降序排列 但有人告诉我,我的方法效率不高 请告诉我是否有有效的方法来实现这一点。排序是一种O(n log n)操作。如果你仔细阅读问题,他们不会说列表应该排序,所以不要做排序操作。相反,您应该做的是从一个只包含您的元素的新列表开始,然后对于原始列表的每个元素,将其附加到前面(如果大于

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

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

  • 首先按降序对链表进行排序
  • 获取元素
  • 插入元素时,即使在插入后,链表也将按降序排列
  • 但有人告诉我,我的方法效率不高


    请告诉我是否有有效的方法来实现这一点。

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

    我想他们希望您假设链接已按原始顺序排序,并且您的插入应该保持这种排序。(我会在采访中问,这是否真的是目的)。在这种情况下,不需要排序-只需迭代,直到找到插入的位置并将其插入。@amit:不,链接在开始时没有排序。对我来说,@amit的解释是唯一有意义的解释。我还想请面试官澄清一下。好吧,名单没有排序,你也不允许排序。除了插入新元素外,您是否允许/期望对该列表(例如排列元素)进行任何更改<代码>列表.插入(分区(列表.开始(),列表.结束(),元素大于(值)),值)。