如何在恒定时间复杂度内插入已排序链表中的项?

时间:2015-06-13 19:31:31

标签: data-structures

我在排序链表中遇到问题。我无法在固定时间内插入项目。如果有可能我怎么解决呢?

此功能时间复杂度为Big-O(N)

template <class ItemType>
void SortedType<ItemType>::InsertItem(ItemType item)
{
  NodeType<ItemType>* newNode;
  NodeType<ItemType>* predLoc;
  NodeType<ItemType>* location;
  bool moreToSearch;

  location = listData;
  predLoc = NULL;
  moreToSearch = (location != NULL);
  while (moreToSearch)
  {
    if (location->info < item)
    {
      predLoc = location;
      location = location->next;
      moreToSearch = (location != NULL);
    }
    else moreToSearch = false;
  }
  newNode = new NodeType<ItemType>;
  newNode->info = item;

  if (predLoc == NULL)
  {
    newNode->next = listData;
    listData = newNode;
  }
  else
  {
    newNode->next = location;
    predLoc->next = newNode;
  }
  length++;
}

3 个答案:

答案 0 :(得分:4)

无法在恒定时间复杂度内插入已排序链接列表中的项目。但是您可以在O(log n)时间复杂度中插入项目。

how to apply binary search O(log n) on a sorted linked list?

答案 1 :(得分:2)

无法以O(1)时间复杂度插入已排序链表中的项目。您只能在时间复杂度为O(1)的未排序链接列表中插入项目。 您可以通过此链接http://bigocheatsheet.com/

了解有关时间复杂性的更多信息

答案 2 :(得分:0)

实际上它在排序链表中是不可能的,但你可以在未排序的链表中插入一个项目,其中常量时间是Big-O(1)。

也看到这个......
https://www.youtube.com/watch?v=tta6BIiIIFI