Data structures 如何在时间复杂度不变的情况下在排序链表中插入项目?

Data structures 如何在时间复杂度不变的情况下在排序链表中插入项目?,data-structures,Data Structures,排序链表中有问题。无法在固定时间内插入项。如果可能的话,我怎么解决呢 这个函数的时间复杂度是Big-O(N) 模板 void SortedType::InsertItem(ItemType项) { NodeType*newNode; 节点类型*predLoc; 节点类型*位置; 布尔·莫雷托研究; 位置=列表数据; predLoc=NULL; moreToSearch=(位置!=NULL); while(moreToSearch) { 如果(位置->信息下一步; moreToSearch=(位置

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

这个函数的时间复杂度是Big-O(N)

模板
void SortedType::InsertItem(ItemType项)
{
NodeType*newNode;
节点类型*predLoc;
节点类型*位置;
布尔·莫雷托研究;
位置=列表数据;
predLoc=NULL;
moreToSearch=(位置!=NULL);
while(moreToSearch)
{
如果(位置->信息<项目)
{
predLoc=位置;
位置=位置->下一步;
moreToSearch=(位置!=NULL);
}
else-moreToSearch=false;
}
newNode=新节点类型;
新建节点->信息=项目;
如果(predLoc==NULL)
{
newNode->next=listData;
listData=newNode;
}
其他的
{
新建节点->下一步=位置;
predLoc->next=newNode;
}
长度++;
}

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


实际上,在已排序的链表中是不可能的,但您可以在未排序的链表中插入一个项目,该项目的固定时间为Big-O(1)

还可以看到这个…

不可能在时间复杂度为O(1)的排序链表中插入项目。只能在时间复杂度为O(1)的未排序链表中插入项。
您可以通过此链接了解更多关于时间复杂性的信息

您不能。如果你能做到这一点,你将彻底改变排序,你可以从一个空链表开始,根据定义,它将被排序,添加第一个项目,仍然排序,然后继续,这意味着排序项目将是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++;
}