【发布时间】:2020-04-23 22:55:17
【问题描述】:
以下解决方案的空间和时间复杂度(最坏情况)是多少?
Node getNodeFromTail(Node head, int x){
Node p = head;
Node q = head;
int diff = 0;
while (p.next != NULL){
p = p.next;
if (diff >= x)
q = q.next;
else
diff++;
}
return q;
}
这是上面代码的解释:
以这个链表为例:1 --> 2 --> 3 --> 4 --> 5
x == 尾部的值,
当 x 为 0 时,结果应为 5
当 x 为 1 时,结果应为 4
当 x 为 2 时,结果应为 3,依此类推。
这就是我的想法:
空间复杂性
常数空间O(1)
时间复杂度
while 循环在 O(n) 时间内遍历链表;
其中 n = 链表的长度。
但是,我认为由于 if 语句 存在额外的复杂性,我觉得应该是 O(n-x) 时间
因此给我们留下:O(n) * O(n-x),这几乎是 O(n^2)(即二次)的总体时间复杂度。
我只是有一种感觉,在最坏的情况下,这不是完全线性的时间。
这是正确的吗?
【问题讨论】:
标签: algorithm linked-list singly-linked-list