立志用最少的代码做最高效的表达


给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。
返回删除后的链表的头节点。
注意:此题对比原题有改动

示例 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. 删除链表的节点相关推荐

  1. 【LeetCode】剑指 Offer 18. 删除链表的节点

    [LeetCode]剑指 Offer 18. 删除链表的节点 文章目录 [LeetCode]剑指 Offer 18. 删除链表的节点 一.双指针 一.双指针 本题删除值为 val 的结点需分为两步: ...

  2. 【算法】剑指 Offer 18. 删除链表的节点

    1.概述 剑指 Offer 18. 删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: he ...

  3. 【剑指 Offe】剑指 Offer 18. 删除链表的节点

    目录标题 算法汇总 题目 关键点 代码 1.解体方法 思路 代码 时间和空间复杂度 2.解题方法,如暴力法 思路 代码 时间和空间复杂度 算法汇总 以下是所有算法汇总,包括GitHub源码地址链接:力 ...

  4. c语言用指针删除链表free,leetcode剑指 Offer 18(删除链表的节点)--C语言实现

    求: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 ...

  5. LeetCode-剑指 Offer 18. 删除链表的节点

    剑指 Offer 18. 删除链表的节点 思路:用一个头节点,以及pre,cur双指针 /*** Definition for singly-linked list.* struct ListNode ...

  6. 剑指offer:删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  7. python删除链表中重复的节点_剑指offer:删除链表中重复的节点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  8. 《剑指offer》删除链表中重复的节点

    题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后为 ...

  9. 剑指offer之删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

最新文章

  1. Spark Worker启动源码
  2. 作者:黄媛洁(1992-),女,食品安全大数据技术北京市重点实验室、北京工商大学计算机与信息工程学院硕士生...
  3. 【车道线检测与寻迹】【1月8日】车辆、道路模型与道路跟踪
  4. MYSQL 数据库配置优化
  5. 利用DroidCamX将手机摄像头打造成电脑高清摄像头
  6. 如何让图片变得更清晰(汇总中)
  7. maven跳过Test打包
  8. 什么是多因子量化选股模型?
  9. Unittest-跳过
  10. 孙悟空吃蟠桃c语言编程,孙悟空吃蟠桃歇后语
  11. 数仓搭建 ODS 层
  12. carla中车辆的朝向(yaw 偏航角)
  13. 能让人少奋斗十年的语录!
  14. Instead Of Insert触发器
  15. 咨询_计算机屏幕_雾面屏;
  16. Spark读取压缩文件
  17. windows下git bash 添加zip命令功能
  18. 【05】Oracle创建用户、修改密码
  19. webuploader上传问题
  20. Python mplfinance库④ 如何自定义style样式

热门文章

  1. C++的最后一道坎|百万年薪的程序员
  2. 别再说你不会ElasticSearch,都给你整理好了
  3. 动手实现一个 localcache - 设计篇
  4. CDN关键技术研究与应用—内容路由技术
  5. LiveVideoStack线上交流分享 (十七) —— AV1编码器优化与实用落地演进之路
  6. 2021博客之星,请帮忙投上宝贵一票
  7. kubernetes1.8.4 安装指南 -- 6. 安装kubernetes master
  8. React 15.5带来重大修改
  9. Git的基础知识和常用命令
  10. Electron开发入门