Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >精选 TOP 面试题 001 | LeetCode 237. 删除链表中的节点

精选 TOP 面试题 001 | LeetCode 237. 删除链表中的节点

作者头像
江不知
发布于 2019-12-12 07:51:53
发布于 2019-12-12 07:51:53
37100
代码可运行
举报
文章被收录于专栏:编程拯救世界编程拯救世界
运行总次数:0
代码可运行

题目描述

原题链接 LeetCode 237. 删除链表中的节点:https://leetcode-cn.com/problems/delete-node-in-a-linked-list

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

现有一个链表 head = [4,5,1,9],它可以表示为:

示例 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.

说明:

  • 链表至少包含两个节点。
  • 链表中所有节点的值都是唯一的。
  • 给定的节点为非末尾节点并且一定是链表中的一个有效节点。
  • 不要从你的函数中返回任何结果。

思路分析

如果我们要在链表中删除一个节点,一般的操作是:

  1. 修改要删除节点的上一个节点的指针
  2. 将该指针指向要删除节点的下一个节点

例如,在链表 [4, 5, 1, 9] 中,当我们要删除节点 5 时,我们会修改节点 5 上一个节点 4 的指针,让它指向节点 5 的下一个节点,即节点 1

修改节点 4 的指针,让它指向节点 1

但这道题只告诉我们要删除的节点,我们并不知道该节点的上一个节点是什么,这时候又该如何是好呢?

既然我们要删除一个节点时需要知道它的上一个节点,如果我们无法得知上一个节点,我们就找一个可以知道上一个节点的节点,把它变成要删除的节点,然后删除它

这样听起来好像有些拗口?没事,直接看一个例子!

还是 [4, 5, 1, 9] 链表,还是删除节点 5

首先,我们把节点 5 下一个节点的值赋给它,把它变成一个「不需要删除」的节点:

把节点 5 下一个节点的值赋给它

这样一来,第二个节点 1 和第三个节点 1,无论我们删除其中的哪一个,都可以得到最终结果 [4, 1, 9]。既然第二个节点不好删除,那我们就果断删除第三个啦~

改变第二个节点 1 的指针,将它指向第 4 个节点 9,这样一来,第三个节点 1 就被删除了:

改变第 2 个节点的指针,让它指向第 4 个节点

具体实现

Python

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution:
    def deleteNode(self, node):
        """
        :type node: ListNode
        :rtype: void Do not return anything, modify node in-place instead.
        """
        node.val = node.next.val
        node.next = node.next.next

Go

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func deleteNode(node *ListNode) {
    node.Val = node.Next.Val
    node.Next = node.Next.Next
}

复杂度

  • 时间复杂度 O(1)
  • 空间复杂度 O(1)

总结一下

这道题没有给出链表的头节点,而是直接给出要删除的节点,让我们进行原地删除。我们对于该节点的前一个节点一无所知,所以无法直接执行删除操作。因此,我们将要删除节点的 next 节点的值赋值给要删除的节点,转而去删除 next 节点,从而达成目的。

题目中指明了「给定的节点为非末尾节点」且「链表至少包含两个节点」,所以上述方案是切实可行的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程拯救世界 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
LeetCode 图解 | 237.删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
五分钟学算法
2020/02/27
3050
【leetcode刷题】T110-删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
木又AI帮
2019/07/17
3410
leecode刷题(20)-- 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
希希里之海
2019/03/08
6930
leecode刷题(20)-- 删除链表中的节点
LeetCode笔记:237. Delete Node in a Linked List
一般我们删除一个链表节点,直接将其上一个节点的next指向其下一个节点就可以了,但是这里只给出了该节点本身,也就是说你只能获取到该节点本身以及其下一个节点。那么就只能将该节点直接变成下一个节点了,将其值设为下一个节点的值,将其next指向下一个节点的next,就可以了。
Cloudox
2021/11/23
1700
[第28期] 回顾一下常见的链表操作
最近一直在整理上周参加的管理培训的东西, 已经写好了,内容太长, 不太适合发到公众号里, 我发到了思否上,感兴趣的朋友可以看看。
皮小蛋
2020/03/02
3480
LeetCode 203 & 237. Delete Node in a Linked List
Write a function to delete a node (except the tail) in a singly linked list, given only access to that node.
大学里的混子
2018/10/28
4870
LeetCode-面试题18-删除链表的节点
没有O(1)的时间复杂度要求,顺序查找,头结点是查找值直接返回,如果不是则继续找,指针指向查找数的前一个位置,如果没有找完了都没有找到,循环依然是要跳出的,此时res.next==null,就不需要对链表进行修改,所以只有!=null的时候才有删除操作
benym
2022/07/14
1890
力扣每日一刷(2023.10.2)
输入:head = [1,2,6,3,4,5,6], val = 6 输出:[1,2,3,4,5] 示例 2: 输入:head = [], val = 1 输出:[] 示例 3: 输入:head = [7,7,7,7], val = 7 输出:[] 提示:
用户11097514
2024/05/31
890
力扣每日一刷(2023.10.2)
腾讯面试题!!!【手绘漫画】图解LeetCode之删除链表中的节点(LeetCode 237题)
链表是 4, 5, 1, 3,想除去的节点是 5,常规操作,先 get 然后 delete,这样就OK了。不过就像前面说过的一样,传入的是 node,所以这里用的方法是用要删除节点的下一个位置,去替代要删除的节点,这样就完美的解决了问题!
我是管小亮
2020/04/21
3170
腾讯面试题!!!【手绘漫画】图解LeetCode之删除链表中的节点(LeetCode 237题)
剑指offer - 删除链表节点 - JavaScript
题目描述:给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。
心谭博客
2020/04/21
8920
脚撕LeetCode(237)Easy
题目地址:https://leetcode-cn.com/problems/delete-node-in-a-linked-list/comments/
JathonKatu
2021/06/10
2120
【剑指Offer】18. 删除链表的节点
NowCode 题目描述 返回删除后的链表的头节点。 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 解题思路 /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode
瑞新
2020/12/07
2230
【LeetCode程序员面试金典】面试题 02.03. Delete Middle Node LCCI
Implement an algorithm to delete a node in the middle (i.e., any node but the first and last node, not necessarily the exact middle) of a singly linked list, given only access to that node.
韩旭051
2020/06/23
2530
LeetCode 系列 面试题 02.03. 删除中间节点
要删除链表中的中间节点,我们可以直接删除指定中间节点的下一个结点。此时呈现出的表面结果为删除的当前节点,但实际上删除的却是下一个结点。此时主要进行的是赋值操作,时间复杂度为 O(1)。
村雨遥
2020/07/07
4240
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.
村雨遥
2022/06/16
1590
LeetCode 训练场:237. 删除链表中的节点
Leetcode刷题 237. 删除链表中的节点 两行代码实现
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。
一只胡说八道的猴子
2020/10/09
4320
Leetcode刷题 237. 删除链表中的节点 两行代码实现
LeetCode 237. 删除链表中的节点
请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点,你将只被给定要求被删除的节点。
Michael阿明
2022/11/26
4430
LeetCode 237. 删除链表中的节点
Python解答力扣网站题库简单版---
在无限的平面上,机器人最初位于 (0, 0) 处,面朝北方。机器人可以接受下列三条指令之一:
py3study
2020/01/16
8820
LeetCode:237 删除链表中的节点
核心在于:比如4->5->6->7 要删除6的话,是吧,题目也说不能删除末尾的是吧,那就只能先把第四个节点的值赋值给上一个节点的值(覆盖),然后是在删除最后一个节点就行了啊. node.next=node.next.next;因为没有第五个节点所以第五个null覆盖掉第四个节点的值就搞定了。
贵哥的编程之路
2020/10/28
8290
LeetCode:237 删除链表中的节点
剑指 Offer 18. 删除链表的节点
对于链表的删除 我们需要知道删除链表的节点只能在要删除节点的前一个节点做删除操作,如果在要删除的节点本身做操作是无法进行删除的,明确了这一点很容易就可以做出这道题;
暴躁的程序猿
2022/03/24
1560
相关推荐
LeetCode 图解 | 237.删除链表中的节点
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验