237. 删除链表中的节点
解题思路
这题就是说只给出要被删除的节点,只需要找出被删除节点的上个节点,把上个节点的 next 指向下个节点就好了
但是这个是单链表,所以无法获得这个节点的上个节点
但是可以通过被删除节点的下个节点,把下个节点的值赋值给被删除的节点,然后再删除下个节点即可(也就是说 root.next = root.next.nex
即可, 把 next 指向被删除节点的下一个节点)
也就是 4、5、1、9,只需要把 9 的节点的值赋值给 1,然后就变成了 4、5、9、9,然后再删除被删除节点指向的下个节点,也就是最后的节点 9,就可以达到题解的目的了。也就是只有两步
- 把被删除节点的下个节点的值赋值给被删除的节点
- 删除被删除节点的下个节点
代码
function deleteNode(root: ListNode | null): void {
if (root && root.next) {
root.val = root.next.val
root.next = root.next.next
}
}
复杂度分析
时间复杂度:上述代码没有任何的循环,所以时间复杂度为 O(1)
空间复杂度:上述代码没有任务的数组,所以空间复杂度为 O(1)