在 O(1) 时间内删除链表节点

题目描述

在 O(1) 时间内删除链表节点。

方案:如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。

题目链接: 在 O(1) 时间内删除链表节点

代码

/**
* 在 O(1) 时间内删除链表节点
*/
public class Jz69 { /**
* 方案:
* 如果该节点不是尾节点,那么可以直接将下一个节点的值赋给该节点,然后令该节点指向下下个节点,再删除下一个节点,时间复杂度为 O(1)。
* 否则,就需要先遍历链表,找到节点的前一个节点,然后让前一个节点指向 null,时间复杂度为 O(N)。
*
* @param head
* @param tobeDelete
* @return
*/
public ListNode deleteNode(ListNode head, ListNode tobeDelete) {
if (head == null || tobeDelete == null) {
return null;
}
if (tobeDelete.next != null) {
// 要删除的节点不是尾结点
ListNode next = tobeDelete.next;
tobeDelete.val = next.val;
tobeDelete.next = next.next;
} else {
if (head == tobeDelete) {
// 只有一个节点
head = null;
} else {
ListNode cur = head;
while (cur.next != tobeDelete) {
cur = cur.next;
}
cur.next = null;
}
} return head;
} public static void main(String[] args) { }
}

【每日寄语】 窦燕山,有义方;教五子,名俱扬。

最新文章

  1. python爬虫学习(10) —— 专利检索DEMO
  2. wordpress多站点环境设置上传附件大小
  3. Enterprise Solution 2.2 开发帮助文档集合
  4. 【Python】Django 聚合 Count与Sum用法,注意点
  5. BZOJ1075 : [SCOI2007]最优驾车drive
  6. html部分---样式表,选择器;
  7. Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(一)
  8. 【bzoj】1026: [SCOI2009]windy数
  9. JavaScript Window Screen
  10. C++虚函数在内存中的实现
  11. Effective C++ 条款24
  12. Prism for Xamarin.Forms
  13. <魔域>按键精灵脚本
  14. 75.纯 CSS 创作一支摇曳着烛光的蜡烛
  15. linux学习笔记-时间配置综述
  16. redis跳跃表
  17. Linux系统性能监控工具:tsar 安装、配置、以及使用
  18. Browsersync结合gulp和nodemon实现express全栈自动刷新
  19. Go 2 Draft Designs
  20. CloudSetuper

热门文章

  1. 从Apache官网下载Jar包步骤
  2. ApacheCN JavaWeb 译文集 20211017 更新
  3. Android基本控件Spinner的简单使用【转】
  4. Tomcat下 session 持久化问题(重启服务器session 仍然存在)
  5. php 递归目录
  6. 前端也能做AI
  7. RAID磁盘阵列与配置
  8. Spring Cloud 源码分析之OpenFeign
  9. Node.js躬行记(15)——活动规则引擎
  10. [源码解析] 模型并行分布式训练Megatron (5) --Pipedream Flush