C++ 链表中获取第 i 个元素的函数 GetElem() 的时间复杂度分析
C++ 链表中获取第 i 个元素的函数 GetElem() 的时间复杂度分析
函数代码:
bool GetElem(LinkNode* L, int i, ElemType& e)
{
int j = 1;
LinkNode* p = L->next;//p指向首结点
if (i <= 0 || L->next == L) //i错误或者L为空
return false;
if (i == 1) //首结点作为特殊情况处理
{
e = L->next->data;
return true;
}
else //i不为1时
{
while (j <= i - 1 && p != L) //找第i个结点p
{
j++;
p = p->next;
}
if (p == L) //此时第i个结点指向头结点,表示没有第i个元素
return false;
else //找到了提取它的值并返回 true
{
e = p->data;
return true;
}
}
}
时间复杂度分析:
该函数的时间复杂度为 O(n),其中 n 为链表的长度。
原因:
- 在最坏情况下,需要遍历整个链表才能找到第 i 个元素,例如当 i 等于链表长度时。
- 函数中使用
while循环进行遍历,循环次数最多为 n。 - 循环体内的操作(如指针移动、比较等)时间复杂度为 O(1)。
因此,该函数的时间复杂度为 O(n)。
总结:
该函数 GetElem() 的时间复杂度与链表的长度成正比,在最坏情况下需要遍历整个链表,时间复杂度为 O(n)。
原文地址: https://www.cveoy.top/t/topic/bFvN 著作权归作者所有。请勿转载和采集!