我在排序链表中遇到问题。我无法在固定时间内插入项目。如果有可能我怎么解决呢?
此功能时间复杂度为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++;
}
答案 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