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

10-链表练习-LeetCode82删除排序链表中的重复元素II

题目

给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回已排序的链表 。

示例 1:

输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]

示例 2:

输入:head = [1,1,1,2,3]
输出:[2,3]

提示:

    链表中节点数目在范围 [0, 300] 内
    -100 <= Node.val <= 100
    题目数据保证链表已经按升序排列


思路

上一题:重复节点只保留一个,向后多看一个节点。

本题:重复节点一个都不留,向后多看多个节点。

  • 当前情况不能用prev和cur来判断重复节点,此时prev引用一定指向不重复的节点,需要再引入一个next引用。(向后多走几步)
  1. 当链表中只有一个节点(next == null),不可能出现重复元素。
  2. 当cur.val != next.val时,说明cur不是重复节点,三个引用都向后移动一个单位。
  3. 当cur.val == next.val时,让next继续向后走,直到next指向与cur.val不相等的节点。此时prev到next之间全是需要删除的元素:prev.next = next; 当且仅当cur.val != next.val才能移动prev指针!此时cur指向next,next指向cur.next。

上面3种情况分别对应下面3副图:


代码

/*** Definition for singly-linked list.* public class ListNode {*     int val;*     ListNode next;*     ListNode() {}*     ListNode(int val) { this.val = val; }*     ListNode(int val, ListNode next) { this.val = val; this.next = next; }* }*/
class Solution {public ListNode deleteDuplicates(ListNode head) {ListNode dummyHead = new ListNode(101);dummyHead.next = head;ListNode prev = dummyHead;ListNode cur = prev.next;while(cur != null) {ListNode next = cur.next;if(next == null) {//此时链表中只有一个元素,不可能出现重复元素return dummyHead.next;} else if(cur.val != next.val) {//此时cur不是重复节点,三个指针都向后移动一个单位prev = prev.next;cur = cur.next;} else {//此时cur.val == next.val,让next指针一直向后移动,直到与cur.val不相等的节点位置为止while(next != null && cur.val == next.val) {next = next.next;}//此时next指向了第一个不重复的元素,prev到next之间所有元素全部删除prev.next = next;cur = next;}}return dummyHead.next;}
}

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

相关文章:

  • 贯穿设计模式第五话--接口隔离原则
  • C语言计算机二级/C语言期末考试 刷题(四)
  • JDK8中Stream接口的常用方法
  • ThingsBoard源码解析-数据订阅与规则链数据处理
  • 探究Transformer模型中不同的池化技术
  • Android 9.0 设置讯飞语音引擎为默认tts语音播报引擎
  • 直流无刷电机驱动的PWM频率
  • 机房动环监控4大价值,轻松解决学校解决问题
  • 用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)
  • Burpsuite详细教程
  • 目标检测:FP(误检)和FN(漏检)统计
  • 【MySQL专题】04、性能优化之读写分离(MyCat)
  • 信息系统项目管理师第四版知识摘编:第5章 信息系统工程
  • 【2023春招】西山居游戏研发岗笔试AK
  • 什么是分布式,分布式和集群的区别又是什么?
  • Cellchat和Cellphonedb细胞互作一些问题的解决(error和可视化)
  • 大文件分片上传的实现【前后台完整版】
  • Java序列化面试总结
  • fs的常用方法
  • 【华为OD机试 2023最新 】字符串重新排列、字符串重新排序(C++ 100%)
  • Matlab自动消除论文插图白边的7种方法
  • Python每日一练(20230330)
  • 面试官:Tomcat 在 SpringBoot 中是如何启动的(二)
  • 软件测试岗位中,如何顺利拿下50K+?送你一份涨薪秘籍
  • java webflux函数式实现数据结构
  • 百度文心一言可以完胜ChatGPT的4点可能性
  • 大型分布式架构设计
  • 基于springboot实现校园在线拍卖电商系统【源码】
  • SaaS智慧校园源码,电子班牌管理系统 人脸考勤、综合评价系统、请假管理、校务管理
  • MONGODB mongodb 一般人不知道的数据类型与使用