O(1)时间删除链表结点
前提是调用者知道要删除的结点的指针,而不是要删除结点的值
不过此类删除问题,当然是存在各种边界条件了:
1) 链表中只有一个结点 - 删除唯一的一个
2) 要删除的结点是最后一个结点 -
3) 要删除的结点不存在 - 多虑了,毕竟给定的参数是一个结点参数,所以不会存在这种问题,除非调用者故意给定

public class _Q13 {public void DeleteNode(ListNode head, ListNode toBeDeleted){if(head == null || toBeDeleted == null) return;if(toBeDeleted.next != null){ // 删除的结点不是尾结点-那么链表中至少有两个结点toBeDeleted.value = toBeDeleted.next.value;toBeDeleted.next = toBeDeleted.next.next;// 不知这种去掉引用的结点是否会被GC搜集掉 - 栈中是不会被GC的,因为存在过期对象的引用。但是链表引用直接去掉了}else{if(head.next == toBeDeleted){ // 删除唯一的一个结点head.next = null;}else{ // 删除多个结点中的尾结点ListNode node = head.next;while((node.next != toBeDeleted) && (node.next != null)) node = node.next;node.next = null;}}}}

测试代码:

public class _Q13Test extends TestCase {_Q13 deleteNode = new _Q13();public void test(){ListNode head = new ListNode();ListNode node1 = new ListNode();ListNode node2 = new ListNode();ListNode node3 = new ListNode();ListNode node4 = new ListNode();node1.value = 1;node2.value = 2;node3.value = 3;node4.value = 4;head.next = node1;node1.next = node2;node2.next = node3;node3.next = node4;node4.next = null;ListNode toBeDeleted1 = node1;ListNode toBeDeleted2 = node2;ListNode toBeDeleted3 = node3;ListNode toBeDeleted4 = node4;CommonUtils.PrintList(head);deleteNode.DeleteNode(head, toBeDeleted1);CommonUtils.PrintList(head);}}

【剑指offer-Java版】13O(1)时间删除链表结点相关推荐

  1. 剑指offer java版 test3—从尾到头打印链表

    标题:剑指offer java版 test3-从尾到头打印链表 题目:输入一个链表,按链表从尾到头的顺序返回一个ArrayList. 解答:知识不够全面,用ArrayList做的 但是看到大佬们还可以 ...

  2. 剑指offer java版 test42—找出和为S的两个数,左右夹逼法(双指针法)

    前言:受上一题的启发,这题自己也编出来了.在碰到这种有序数列的时候,经常会用到双指针法,一个指左边,一个指右边,然后依照规则移动,增加或缩小范围.很实用. 题目: 输入一个递增排序的数组和一个数字S, ...

  3. 剑指offer java版(三)

    二叉搜索树的后序遍历 问题描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 对于后序遍历来说, ...

  4. 剑指offer java版(一)

    二维数组中的查找 问题描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数 ...

  5. 剑指offer没有java版吗_剑指Offer(Java版) 持续更新中

    面试题2 单例(之前有整理,略) 面试题3 二维数组中的查找 public boolean find(int target, int [][] array) { boolean found = fal ...

  6. 【剑指offer】面试题18:删除链表的节点(Java)

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

  7. 剑指Offer第二版Java代码实现

    剑指Offer第二版Java代码实现 A.单例模式 面试题 2:实现Singleton模式 B.面试需要的基础知识 面试题 3:数组中重复的数字 面试题 4:二维数组的查找 面试题 5:替换空格 面试 ...

  8. 剑指offer最新版_剑指Offer——Java版本(持续更新)

    0 前言 邻近校招,算法要命!!! 本文为研究剑指Offer过程中的笔记,整理出主要思路以及Java版本题解,以便记忆和复习. 参考整理来自<剑指Offer 第二版>. 特别注意,对每道题 ...

  9. 《LeetCode力扣练习》剑指 Offer 25. 合并两个排序的链表 Java

    <LeetCode力扣练习>剑指 Offer 25. 合并两个排序的链表 Java 一.资源 题目: 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的. 示例1: ...

最新文章

  1. CREATE TABLESPACE
  2. 智能车竞赛接入工程训练竞赛相关事项-建议稿件
  3. 实用的人工智能 但数据 Python 速查表
  4. 智慧校园“手环考勤”已成为学校常态
  5. 你是什么时候真正从产品助理成长为产品经理的?
  6. asp.net的控件视图状态
  7. java get post 注解,GET/POST接收或发送数据的问题
  8. android sqlite 添加多个表,Android的 - 导入多个.CSV文件在SQLite数据库的多个表(Android - Impo...
  9. windows7网购火车票全解析
  10. [学习笔记]java基础Java8SE开发环境搭建、第一个Java Hello World、Java程序的编译与执行...
  11. 利用 openresty balancer_by_lua 实现一个简单的 ip_hash upstream 调度
  12. 索尼相机手机控制对焦,操控指南丨 使用索尼微单的十个小技巧
  13. 声音存储空间计算公式_声音图像视频容量计算公式
  14. InoReader——网页无法打开
  15. 纯字体logo怎么设计?设计logo几步完成
  16. easyPOI和导入复杂excel的各种坑
  17. 【stm32c8t6多个串口同时使用】
  18. 三相同步电机怎么接线图_三相变频电机接线图及详细讲解
  19. nginx和openresty配置静态资源时,样式错乱
  20. 水利RTU、水文水资源RTU、水利遥测终端

热门文章

  1. 7000 界面语言不升级_仅限今日!手把手教你C++图形界面开发|附完整代码,海量干货!...
  2. C++编程进阶7(何时使用成员函数模板,模板类的实参推断与类型转换、继承与数组)
  3. HALCON窗口出界解决方法
  4. wxpython dataview处理大量数据_38个常用Python库:数值计算、可视化、机器学习等8大领域都有了...
  5. 如何在geth中创建genesis.json_如何在Photoshop中应用“通道混合器”创建一个复古韵味色调...
  6. React组件继承的由来
  7. C++_类和动态内存分配2-改进后的String类
  8. iis重启的几种方法
  9. Ubuntu 14.04环境变量修改
  10. Cxf + Spring3.0 入门开发WebService