一、LT-删除链表中的节点(237)

题目:
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点
现有一个链表 — head = [4,5,1,9],它可以表示为:
image.png
示例 1:

输入:head = [4,5,1,9], node = 5 输出:[4,1,9] 解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.

示例 2:

输入:head = [4,5,1,9], node = 1 输出:[4,5,9] 解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.


提示:

  • 链表至少包含两个节点。
  • 链表中所有节点的值都是唯一的。
  • 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
  • 不要从你的函数中返回任何结果。

解题思路
由于无法直接获取被删除节点的上个节点,但可以将被删除节点转移到下个节点

  • 将被删节点的值改为下个节点的值
  • 删除下个节点

解题代码

  1. /**
  2. * Definition for singly-linked list.
  3. * function ListNode(val) {
  4. * this.val = val;
  5. * this.next = null;
  6. * }
  7. */
  8. /**
  9. * @param {ListNode} node
  10. * @return {void} Do not return anything, modify node in-place instead.
  11. */
  12. var deleteNode = function(node) {
  13. node.val = node.next.val
  14. node.next = node.next.next
  15. };

时间复杂度和空间复杂度都是O(1)。

参考链接: