当前位置: 首页 > news >正文

力扣之有序链表去重

删除链表中的重复元素,重复元素保留一个

p1   p2
1 -> 1 -> 2 -> 3 -> 3 -> null

p1.val == p2.val 那么删除 p2,注意 p1 此时保持不变

p1   p2
1 -> 2 -> 3 -> 3 -> null

p1.val != p2.val 那么 p1,p2 向后移动

       p1   p2
1 -> 2 -> 3 -> 3 -> null
         
              p1   p2
1 -> 2 -> 3 -> 3 -> null   

p1.val == p2.val 那么删除 p2

              p1   p2
1 -> 2 -> 3 -> null 

当 p2 == null 退出循环

 代码

public ListNode deleteDuplicates(ListNode head) {// 链表节点 < 2if (head == null || head.next == null) {return head;}// 链表节点 >= 2ListNode p1 = head;ListNode p2;while ((p2 = p1.next) != null) {if (p1.val == p2.val) {p1.next = p2.next;} else {p1 = p1.next;}}return head;
}

重复元素一个也不保留

p1 是待删除的上一个节点,每次循环对比 p2、p3 的值

  • 如果 p2 与 p3 的值重复,那么 p3 继续后移,直到找到与 p2 不重复的节点,p1 指向 p3 完成删除

  • 如果 p2 与 p3 的值不重复,p1,p2,p3 向后平移一位,继续上面的操作

  • p2 或 p3 为 null 退出循环

    • p2 为 null 的情况,比如链表为 1 1 1 null

 

p1 p2 p3
s,  1,   1, 1, 2, 3, null

p1 p2    p3
s,   1,    1, 1, 2, 3, null

p1 p2        p3
s,   1, 1, 1, 2, 3, null

p1 p3
s,   2, 3, null

p1 p2 p3
s,   2,  3, null

   p1 p2 p3
s, 2, 3, null

代码 

public ListNode deleteDuplicates(ListNode head) {if (head == null || head.next == null) {return head;}ListNode s = new ListNode(-1, head);ListNode p1 = s;ListNode p2;ListNode p3;while ((p2 = p1.next) != null && (p3 = p2.next) != null) {if (p2.val == p3.val) {while ((p3 = p3.next) != null && p3.val == p2.val) {}p1.next = p3;} else {p1 = p1.next;}}return s.next;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IEC62056标准体系简介-4.IEC62056-53 COSEM应用层
  • 医疗器械网络安全 | 漏洞扫描、渗透测试没有发现问题,是否说明我的设备是安全的?
  • 数字化转型领航者:佑美科技塑造智能健康新生态
  • 什么是 GC Roots??一文带你看懂!!
  • MT3047 区间最大值
  • 百元平价蓝牙耳机哪款好?平价高性价比蓝牙耳机推荐
  • 新书速览|HTML5+CSS3 Web前端开发与实例教程:微课视频版
  • 【C++初阶】C++入门(下)
  • 学圣学最终的目的是:达到思无邪的状态( 纯粹、思想纯正、积极向上 )
  • Scala 数据类型
  • 香橙派5plus上跑云手机方案二 waydroid
  • 【cocos2dx】【iOS工程】如何保存用户在游戏内的绘画数据,并将数据以图像形式展示在预览界面
  • 底软基础 | 嵌入式程序员编程必看的525钟C/C++ 安全编程问题
  • 联想拯救者Y7000 IRX9 笔记本接口功能介绍
  • 一文实践强化学习训练游戏ai--doom枪战游戏实践
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Apache Pulsar 2.1 重磅发布
  • C++入门教程(10):for 语句
  • canvas 高仿 Apple Watch 表盘
  • ES6核心特性
  • express.js的介绍及使用
  • gf框架之分页模块(五) - 自定义分页
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript对象详解
  • magento2项目上线注意事项
  • vue脚手架vue-cli
  • Webpack入门之遇到的那些坑,系列示例Demo
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 规范化安全开发 KOA 手脚架
  • 目录与文件属性:编写ls
  • 深度解析利用ES6进行Promise封装总结
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 阿里云服务器购买完整流程
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • (1)bark-ml
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (2)空速传感器
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (k8s)Kubernetes 从0到1容器编排之旅
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (二)Kafka离线安装 - Zookeeper下载及安装
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot“微印象”在线打印预约系统 毕业设计 061642
  • (四)进入MySQL 【事务】
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (一)VirtualBox安装增强功能
  • (转)Oracle存储过程编写经验和优化措施
  • (转)重识new
  • .NET Reactor简单使用教程
  • .NET Standard 的管理策略