Skip to main content

237. 删除链表中的节点

解题思路

这题就是说只给出要被删除的节点,只需要找出被删除节点的上个节点,把上个节点的 next 指向下个节点就好了

但是这个是单链表,所以无法获得这个节点的上个节点

但是可以通过被删除节点的下个节点,把下个节点的值赋值给被删除的节点,然后再删除下个节点即可(也就是说 root.next = root.next.nex 即可, 把 next 指向被删除节点的下一个节点)

也就是 4、5、1、9,只需要把 9 的节点的值赋值给 1,然后就变成了 4、5、9、9,然后再删除被删除节点指向的下个节点,也就是最后的节点 9,就可以达到题解的目的了。也就是只有两步

  1. 把被删除节点的下个节点的值赋值给被删除的节点
  2. 删除被删除节点的下个节点

代码

function deleteNode(root: ListNode | null): void {
if (root && root.next) {
root.val = root.next.val
root.next = root.next.next
}
}

复杂度分析

时间复杂度:上述代码没有任何的循环,所以时间复杂度为 O(1)

空间复杂度:上述代码没有任务的数组,所以空间复杂度为 O(1)