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

删除链表中的节点

题目

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

示例 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 指向待删除节点的下一节点。

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

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

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

代码

class Solution {
    public void deleteNode(ListNode node) {
        node.val = node.next.val;
        node.next = node.next.next;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章