ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepSeek LeetCode 237. 删除链表中的节点 Java实现

DeepSeek    LeetCode 237. 删除链表中的节点 Java实现 LeetCode 237. 删除链表中的节点题目描述有一个单链表的 head我们想删除它其中的一个节点 node。给你一个需要删除的节点 node。你将 无法访问 head。链表的所有值都是 唯一的并且保证给定的节点 node 不是链表中的最后一个节点。删除给定的节点。注意删除节点并不是指从内存中删除它。这里的意思是· 给定节点的值不应该存在于链表中。· 链表中的节点数应该减少 1。· node 前面的所有值顺序相同。· node 后面的所有值顺序相同。解题思路由于无法访问 head我们不能通过修改前驱节点的 next 指针来删除当前节点。巧妙解法把下一个节点的值复制到当前节点然后删除下一个节点。这样效果上等价于删除了当前节点虽然内存地址没变但值被覆盖了。图解假设链表为 4 - 5 - 1 - 9要删除节点 5第一步把 next 的值 (1) 复制到当前节点 4 - 1 - 1 - 9 第二步让当前节点跳过 next 4 - 1 - 9Java 实现/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val x; } * } */classSolution{publicvoiddeleteNode(ListNodenode){// 将下一个节点的值赋给当前节点node.valnode.next.val;// 跳过下一个节点node.nextnode.next.next;}}复杂度分析指标 复杂度时间复杂度 O(1)空间复杂度 O(1)关键点说明题目保证 node 不是最后一个节点因此 node.next 一定不为 null无需做空检查。本质是偷梁换柱不真正删除 node 这个对象而是让它的值和结构看起来像是被删除了。局限性这个方法要求 node 不能是尾节点。如果要删除的是尾节点就必须从头遍历找到前驱节点无法做到 O(1)。这也是本题为什么明确保证节点不是链表中的最后一个节点。
返回列表