Merge pull request #1947 from juguagua/master

添加复杂度分析:链表部分
This commit is contained in:
程序员Carl
2023-03-14 15:40:18 +08:00
committed by GitHub
5 changed files with 24 additions and 0 deletions

View File

@ -87,6 +87,9 @@ public:
};
```
* 时间复杂度: O(n)
* 空间复杂度: O(1)
## 其他语言版本

View File

@ -145,6 +145,9 @@ public:
};
```
* 时间复杂度: O(n)快慢指针相遇前指针走的次数小于链表长度快慢指针相遇后两个index指针走的次数也小于链表长度总体为走的次数小于 2n
* 空间复杂度: O(1)
## 补充
在推理过程中,大家可能有一个疑问就是:**为什么第一次在环中相遇slow的 步数 是 x+y 而不是 x + 若干环的长度 + y 呢?**

View File

@ -118,6 +118,9 @@ public:
};
```
* 时间复杂度: O(n)
* 空间复杂度: O(1)
**设置一个虚拟头结点在进行移除节点操作:**
```CPP
@ -144,6 +147,9 @@ public:
```
* 时间复杂度: O(n)
* 空间复杂度: O(1)

View File

@ -68,6 +68,9 @@ public:
};
```
* 时间复杂度: O(n)
* 空间复杂度: O(1)
## 递归法
递归法相对抽象一些但是其实和双指针法是一样的逻辑同样是当cur为空的时候循环结束不断将cur指向pre的过程。
@ -97,6 +100,9 @@ public:
};
```
* 时间复杂度: O(n), 要递归处理链表的每个节点
* 空间复杂度: O(n), 递归调用了 n 层栈空间
我们可以发现,上面的递归写法和双指针法实质上都是从前往后翻转指针指向,其实还有另外一种与双指针法不同思路的递归写法:从后往前翻转指针指向。
具体代码如下(带详细注释):
@ -120,6 +126,9 @@ public:
};
```
* 时间复杂度: O(n)
* 空间复杂度: O(n)
## 其他语言版本

View File

@ -152,6 +152,9 @@ private:
};
```
* 时间复杂度: 涉及 `index` 的相关操作为 O(index), 其余为 O(1)
* 空间复杂度: O(n)
## 其他语言版本