【LeetCode】237-删除链表中的节点

删除链表中的节点java

题目

请编写一个函数,使其能够删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。node

示例 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.
说明:
链表至少包含两个节点。
链表中全部节点的值都是惟一的。
给定的节点为非末尾节点而且必定是链表中的一个有效节点。
不要从你的函数中返回任何结果。

解题思路

这道题目实在是有些坑,看完描述心中呵呵,一个 for 循环找到待删除的节点,再将待删除的节点的上一节点的 next 指向待删除节点的下一节点,这不就搞定了吗,简单!一看代码,怎么入参只有一个啊,懵圏半天。函数

这就是这道题目须要注意的一个地方,实际上入参只有一个待删除节点的引用,也就是说,咱们不知道待删除节点的上一个节点,也就没法将它的 next 指向待删除节点的下一节点。code

问题不大,换个思路就是。leetcode

既然咱们拿到的是待删除节点的引用,也就是说,待删除节点及其后面关联的节点,咱们都有。此外题目中还指明待删除节点是一个非末尾结点、链表至少包含两个节点。get

假设咱们拿到的待删除节点是 4->5->6,咱们要删除 4,那么只要用待删除节点的后一个节点的值覆盖待删除节点(此时变成5->5->6),再将待删除节点的 next 指向待删除节点的后一个节点的后一个节点便可(即 4 的 next 指向 6,此时变成 5->6, 5)。io

代码

class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}
相关文章
相关标签/搜索