「这是我参与2022首次更文挑战的第27天,活动详情查看:2022首次更文挑战」
这道题细思极恐:如何让自己在世界上消失,但又不死? —— 将自己完全变成另一个人,再杀了那个人就行了。
——leetcode此题热评
前言
大家好,我是一条,欢迎来到我的算法频道。
只做有趣的算法题,只为面试写算法。
Question
237. 删除链表中的节点
难度:简单
请编写一个函数,用于 删除单链表中某个特定节点 。在设计函数时需要注意,你无法访问链表的头节点 head ,只能直接访问 要被删除的节点 。
题目数据保证需要删除的节点 不是末尾节点 。
示例 1:
输入:head = [1,2,3,4], node = 3 输出:[1,2,4] 示例 2:
输入:head = [0,1], node = 0 输出:[1] 示例 3:
输入:head = [-3,5,-99], node = -3 输出:[5,-99]
提示:
链表中节点的数目范围是 [2, 1000] -1000 <= Node.val <= 1000
链表中每个节点的值都是唯一的 需要删除的节点 node 是 链表中的一个有效节点 ,且 不是末尾节点
Solution
这道题是有点属于急转弯了,存粹为了做题而出题了。 变通,这道题出的挺有意思的!
node这个节点就是需要删除的节点;之前我们可以用head->next->val去判断下一个是否是删除的节点,然后head->next=head->next->next,这题可以用把 node下一节点复制到node,把下一节点跳过!
即当前节点的值=下一个节点的值;
当前节点指向下一个节点的下一个节点。
这种删除也称为懒删除,省去了遍历的步骤,前提是要知道删除的结点,对于删除指定值得元素是不适用的。
实际开发中,也应灵活运用,不能一味套模板。
Code
/**
* @author 一条coding
*/
class Solution {
public void deleteNode(ListNode node) {
node.val = node.next.val;
node.next = node.next.next;
}
}
最后
最后,如果文章对你有帮助。
记得给文章点个赞呀!
也给一条点个关注!