当前位置: 首页 > 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;
}

http://www.lryc.cn/news/396981.html

相关文章:

  • Apache配置与应用(优化apache)
  • 怎么将3张照片合并成一张?这几种拼接方法很实用!
  • YOLOv10改进 | 图像去雾 | MB-TaylorFormer改善YOLOv10高分辨率和图像去雾检测(ICCV,全网独家首发)
  • spring boot读取yml配置注意点记录
  • 电子电气架构 --- 关于DoIP的一些闲思 下
  • Java getSuperclass和getGenericSuperclass
  • ARM功耗管理标准接口之ACPI
  • 2024年网络监控软件排名|10大网络监控软件是哪些
  • 通过Arcgis从逐月平均气温数据中提取并计算年平均气温
  • 每日一题~abc356(对于一串连续数字 找规律,开数值桶算贡献)
  • 商业合作方案撰写指南:让你的提案脱颖而出的秘诀
  • 【MySQL】锁(黑马课程)
  • 1.10编程基础之简单排序--02:奇数单增序列
  • 【leetcode78-81贪心算法、技巧96-100】
  • IEC62056标准体系简介-4.IEC62056-53 COSEM应用层
  • 嵌入式应用开发之代码整洁之道
  • iwconfig iwpriv学习之路
  • 【Docker-compose】搭建php 环境
  • 【记录】LaTex|LaTex 代码片段 Listings 添加带圆圈数字标号的箭头(又名 LaTex Tikz 库画箭头的简要介绍)
  • 《框架封装 · Redis 事件监听》
  • 小白学webgl合集-Three.js加载器
  • 【算法】字符串的排列
  • 5-3.损失函数
  • SCSA第四天
  • 品牌策划必读:9本改变游戏规则的营销经典
  • 泛型
  • react动态渲染列表与函数式组件
  • 小程序内容管理系统设计
  • HDFS 块重构和RedundancyMonitor详解
  • Power BI DAX常用函数使用场景和代码示例