【0ms优化】剑指 Offer 18. 删除链表的节点
立志用最少的代码做最高效的表达
给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动示例 1:
输入: head = [4,5,1,9], val = 5
输出: [4,1,9]
解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:
输入: head = [4,5,1,9], val = 1
输出: [4,5,9]
解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9.说明:
题目保证链表中节点的值互不相同
若使用 C 或 C++ 语言,你不需要 free 或 delete 被删除的节点
解法一
class Solution {public ListNode deleteNode(ListNode head, int val) {if(head == null) return null; // 1、没有节点ListNode pre = head, cur = head.next;if(cur == null) return null; // 2、只有一个节点if(pre.val == val) return cur; // 3、删除的是头结点while(cur.val != val) { // 因为特殊情况已经考虑完,因此循环结束只有一种情况,即匹配到对应值pre = cur;cur = cur.next;}pre.next = cur.next;return head;}
}
优化
只有一个节点的情况和删除首节点的情况统一
class Solution {public ListNode deleteNode(ListNode head, int val) {if(head == null) return null; // 空链表的情况,虽然题目中没有要求,但为了严谨还是写上ListNode pre = head, cur = head.next;if(cur == null || pre.val == val) return cur; // 将只有一个节点的情况和删除首节点的情况统一while(cur.val != val) { // 因为特殊情况已经考虑完,因此循环结束只有一种情况,即匹配到对应值pre = cur;cur = cur.next;}pre.next = cur.next;return head;}
}
完整可运行代码
public class 剑指Offer18_删除链表的节点 {static class ListNode {int val;ListNode next;ListNode(int v) {val = v;}}// 1、常规解法static class Solution1 {public ListNode deleteNode(ListNode head, int val) {if(head == null) return null; // 1、没有节点ListNode pre = head, cur = head.next;if(cur == null) return null; // 2、只有一个节点if(pre.val == val) return cur; // 3、删除的是头结点while(cur.val != val) { // 因为特殊情况已经考虑完,因此循环结束只有一种情况,即匹配到对应值pre = cur;cur = cur.next;}pre.next = cur.next;return head;}}// 2 优化:将只有一个节点的情况和删除首节点的清空统一static class Solution2 {public ListNode deleteNode(ListNode head, int val) {if(head == null) return null; // 空链表的情况,虽然题目中没有要求,但为了严谨还是写上ListNode pre = head, cur = head.next;if(cur == null || pre.val == val) return cur; // 将只有一个节点的情况和删除首节点的情况统一while(cur.val != val) { // 因为特殊情况已经考虑完,因此循环结束只有一种情况,即匹配到对应值pre = cur;cur = cur.next;}pre.next = cur.next;return head;}}public static void main(String[] args) {ListNode head1 = new ListNode(3);ListNode head2 = new ListNode(4);ListNode head3 = new ListNode(5);ListNode head4 = new ListNode(6);head1.next = head2;head2.next = head3;head3.next = head4;System.out.println(head1.val + " " + head1.next.val + " " + head1.next.next.val);Solution1 solution1 = new Solution1();ListNode head5 = solution1.deleteNode(head1, 4);System.out.println(head5.val + " " + head5.next.val + " " + head5.next.next.val);}
}
【0ms优化】剑指 Offer 18. 删除链表的节点相关推荐
- 【LeetCode】剑指 Offer 18. 删除链表的节点
[LeetCode]剑指 Offer 18. 删除链表的节点 文章目录 [LeetCode]剑指 Offer 18. 删除链表的节点 一.双指针 一.双指针 本题删除值为 val 的结点需分为两步: ...
- 【算法】剑指 Offer 18. 删除链表的节点
1.概述 剑指 Offer 18. 删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: he ...
- 【剑指 Offe】剑指 Offer 18. 删除链表的节点
目录标题 算法汇总 题目 关键点 代码 1.解体方法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码地址链接:力 ...
- c语言用指针删除链表free,leetcode剑指 Offer 18(删除链表的节点)--C语言实现
求: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...
- LeetCode-剑指 Offer 18. 删除链表的节点
剑指 Offer 18. 删除链表的节点 思路:用一个头节点,以及pre,cur双指针 /*** Definition for singly-linked list.* struct ListNode ...
- 剑指offer:删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- python删除链表中重复的节点_剑指offer:删除链表中重复的节点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
- 《剑指offer》删除链表中重复的节点
题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 ...
- 剑指offer之删除链表中重复的结点
题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...
最新文章
- Spark Worker启动源码
- 作者:黄媛洁(1992-),女,食品安全大数据技术北京市重点实验室、北京工商大学计算机与信息工程学院硕士生...
- 【车道线检测与寻迹】【1月8日】车辆、道路模型与道路跟踪
- MYSQL 数据库配置优化
- 利用DroidCamX将手机摄像头打造成电脑高清摄像头
- 如何让图片变得更清晰(汇总中)
- maven跳过Test打包
- 什么是多因子量化选股模型?
- Unittest-跳过
- 孙悟空吃蟠桃c语言编程,孙悟空吃蟠桃歇后语
- 数仓搭建 ODS 层
- carla中车辆的朝向(yaw 偏航角)
- 能让人少奋斗十年的语录!
- Instead Of Insert触发器
- 咨询_计算机屏幕_雾面屏;
- Spark读取压缩文件
- windows下git bash 添加zip命令功能
- 【05】Oracle创建用户、修改密码
- webuploader上传问题
- Python mplfinance库④ 如何自定义style样式
热门文章
- C++的最后一道坎|百万年薪的程序员
- 别再说你不会ElasticSearch,都给你整理好了
- 动手实现一个 localcache - 设计篇
- CDN关键技术研究与应用—内容路由技术
- LiveVideoStack线上交流分享 (十七) —— AV1编码器优化与实用落地演进之路
- 2021博客之星,请帮忙投上宝贵一票
- kubernetes1.8.4 安装指南 -- 6. 安装kubernetes master
- React 15.5带来重大修改
- Git的基础知识和常用命令
- Electron开发入门