O(1)复杂度删除链表中的节点
给定链表的头结点和删除的节点。在 O(1)时间复杂度内删除此节点
-
覆盖法
-
此题思路很巧妙,作者的解释也很清晰
-
传统方法需要 O(n)的时间复杂度
- 原因
- 我们需要遍历链表找到想要删除元素的前驱结点,然后将节点删除。
- 原因
-
O(1)复杂度的解法
- 为什么删除节点需要找到前驱节点呢?我们可不可以不找前驱节点
- 可以!此题的思路转化为将想要删除的元素覆盖,然后删除下一个节点
- 这样就达到了 O(1)复杂度的目的
-
边界、负面测试案例
- 删除节点是尾节点
- 此时需要从头到尾遍历,O(n)的时间复杂度
- 删除链表只有一个节点
- 需要将头结点置为 null
- 删除节点是尾节点
-
由于 leetcode 没有此题,故不写代码,思路很牛逼!
-
缺点
- 此题的解法虽然很牛逼,但在实际的工程领域估计比较难应用,因为工程领域一般无法给定一个要删除节点的,而是给定一个节点的属性。
- 为了确保节点在链表中,需要使用 O(n)的时间复杂度遍历链表
-