跳到主要内容

237. 删除链表中的节点

1. 题目简介

难度:中等,原题链接:237. 删除链表中的节点

有一个单链表的 head,我们想删除它其中的一个节点 node。

给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head。

链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。

2. 问题分析

如果能够获取到当前节点的前一个节点,那么我们只要让 prev.next = node.next 即可。

但是题目中给出的只有当前节点 node,并且无法访问头结点 head。那么就需要改变思路。既然无法获取到前一个节点,那么可以做一个“偷梁换柱”,将 node 的值与下一个节点的值交换,然后删除下一个节点即可。

3. 代码实现

/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public void deleteNode(ListNode node) {
// 修改当前 node 的 val,即可让当前 node 替换掉下一个 node
node.val = node.next.val;
node.next = node.next.next;
}
}

4. 复杂度分析

  • 时间复杂度:O(1),只需要修改当前节点的值和指针。
  • 空间复杂度:O(1),不需要额外的空间。